import axios from "axios";
import {flightRequestParamsFactory} from "./flightRequestParamsFactory.js";
import {genBgr} from "../vm/out.js";
import {Decoder, parse} from "../utils/parseResponse.js";
import * as util from "node:util";
import {gzip} from "node:zlib";
import {RequestError, TimeoutError} from "../utils/errors.js";
import {HttpProxyAgent} from "http-proxy-agent";
import {HttpsProxyAgent} from "https-proxy-agent";
import * as https from "https";
import fs from "fs";
import {Price} from "../protots/price.js";
// import {poolSign} from "../vm/workPool.js";


const BookingHeader = {
    "host": "www.google.com",
    "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
    "accept": "*/*",
    "accept-language": "en,en-US;q=0.9,zh-CN;q=0.8,zh;q=0.7,ru;q=0.6",
    "cache-control": "no-cache",
    "content-type": "application/x-www-form-urlencoded;charset=UTF-8",
    "origin": "https://www.google.com",
    "pragma": "no-cache",
    "priority": "u=1, i",
    "sec-ch-ua": "\"Google Chrome\";v=\"131\", \"Chromium\";v=\"131\", \"Not_A Brand\";v=\"24\"",
    "sec-ch-ua-arch": "\"arm\"",
    "sec-ch-ua-bitness": "\"64\"",
    "sec-ch-ua-form-factors": "\"Desktop\"",
    "sec-ch-ua-full-version": "\"131.0.6778.70\"",
    "sec-ch-ua-full-version-list": "\"Google Chrome\";v=\"131.0.6778.70\", \"Chromium\";v=\"131.0.6778.70\", \"Not_A Brand\";v=\"24.0.0.0\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-model": "\"\"",
    "sec-ch-ua-platform": "\"macOS\"",
    "sec-ch-ua-platform-version": "\"15.1.0\"",
    "sec-ch-ua-wow64": "?0",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin",
    "x-same-domain": "1",
}

let CityCodeCache = new Map();
let aa = {
    "Los Angeles": {
        "cityMap": {"LAX": "/m/030qb3t", "BUR": "/m/0r00l"},
        "type": 3,
        "infoLists": ["LAX", "BUR"],
        "text": "/m/030qb3t",
        "code": null,
        "desc": "Los Angeles, California, USA"
    },
    "Honolulu": {
        "cityMap": {"HNL": "/m/02hrh0_"},
        "type": 3,
        "infoLists": ["HNL"],
        "text": "/m/02hrh0_",
        "code": null,
        "desc": "Honolulu, Hawaii, USA"
    },
    "Hong Kong": {
        "cityMap": {"HKG": "/m/03h64"},
        "type": 3,
        "infoLists": ["HKG"],
        "text": "/m/03h64",
        "code": null,
        "desc": "Hong Kong"
    },
    "Osaka": {
        "cityMap": {"KIX": "/m/0dqyw", "ITM": "/m/0dqyw"},
        "type": 3,
        "infoLists": ["KIX", "ITM"],
        "text": "/m/0dqyw",
        "code": null,
        "desc": "Osaka, Japan"
    },
    "Toronto": {
        "cityMap": {"YYZ": "/m/0h7h6", "YTZ": "/m/0h7h6"},
        "type": 3,
        "infoLists": ["YYZ", "YTZ"],
        "text": "/m/0h7h6",
        "code": null,
        "desc": "Toronto, Ontario, Canada"
    },
    "Edmonton": {
        "cityMap": {"YEG": "/m/0nlh7"},
        "type": 3,
        "infoLists": ["YEG"],
        "text": "/m/0nlh7",
        "code": null,
        "desc": "Edmonton, Alberta, Canada"
    },
    "San Francisco": {
        "cityMap": {"SFO": "/m/0d6lp"},
        "type": 3,
        "infoLists": ["SFO"],
        "text": "/m/0d6lp",
        "code": null,
        "desc": "San Francisco, California, USA"
    },
    "Ottawa": {
        "cityMap": {"YOW": "/m/05ksh"},
        "type": 3,
        "infoLists": ["YOW"],
        "text": "/m/05ksh",
        "code": null,
        "desc": "Ottawa, Ontario, Canada"
    },
    "Vancouver": {
        "cityMap": {"YVR": "/m/080h2"},
        "type": 3,
        "infoLists": ["YVR"],
        "text": "/m/080h2",
        "code": null,
        "desc": "Vancouver, British Columbia, Canada"
    },
    "St Johns": {"type": 1, "code": "YYT"},
    "Winnipeg": {
        "cityMap": {"YWG": "/m/0pmq2"},
        "type": 3,
        "infoLists": ["YWG"],
        "text": "/m/0pmq2",
        "code": null,
        "desc": "Winnipeg, Manitoba, Canada"
    },
    "Seoul": {
        "cityMap": {"ICN": "/m/0hsqf", "GMP": "/m/0hsqf"},
        "type": 3,
        "infoLists": ["ICN", "GMP"],
        "text": "/m/0hsqf",
        "code": null,
        "desc": "Seoul, South Korea"
    },
    "Tijuana": {
        "cityMap": {"TIJ": "/m/0pswc"},
        "type": 3,
        "infoLists": ["TIJ"],
        "text": "/m/0pswc",
        "code": null,
        "desc": "Tijuana, Mexico"
    },
    "La Paz": {
        "cityMap": {"LAP": "/m/02dfbn"},
        "type": 3,
        "infoLists": ["LAP"],
        "text": "/m/02dfbn",
        "code": null,
        "desc": "La Paz, Mexico"
    },
    "Mexico City": {
        "cityMap": {"MEX": "/m/04sqj", "NLU": "/m/04sqj"},
        "type": 3,
        "infoLists": ["MEX", "NLU"],
        "text": "/m/04sqj",
        "code": null,
        "desc": "Mexico City, Mexico"
    },
    "Moncton": {
        "cityMap": {"YQM": "/m/04_lb"},
        "type": 3,
        "infoLists": ["YQM"],
        "text": "/m/04_lb",
        "code": null,
        "desc": "Moncton, New Brunswick, Canada"
    },
    "Calgary": {
        "cityMap": {"YYC": "/m/01r32"},
        "type": 3,
        "infoLists": ["YYC"],
        "text": "/m/01r32",
        "code": null,
        "desc": "Calgary, Alberta, Canada"
    },
    "Abbotsford": {
        "cityMap": {"YVR": "/m/080h2", "YXX": "/m/01gc1_"},
        "type": 3,
        "infoLists": ["YVR", "YXX"],
        "text": "/m/01gc1_",
        "code": null,
        "desc": "Abbotsford, British Columbia, Canada"
    },
    "Phoenix": {
        "cityMap": {"PHX": "/m/0d35y", "AZA": "/m/0d35y"},
        "type": 3,
        "infoLists": ["PHX", "AZA"],
        "text": "/m/0d35y",
        "code": null,
        "desc": "Phoenix, Arizona, USA"
    },
    "Prince George": {
        "cityMap": {"YXS": "/m/01c2wl"},
        "type": 3,
        "infoLists": ["YXS"],
        "text": "/m/01c2wl",
        "code": null,
        "desc": "Prince George, British Columbia, Canada"
    },
    "Puerto Vallarta": {
        "cityMap": {"PVR": "/m/01btzt"},
        "type": 3,
        "infoLists": ["PVR"],
        "text": "/m/01btzt",
        "code": null,
        "desc": "Puerto Vallarta, Mexico"
    },
    "Orlando": {
        "cityMap": {"MCO": "/m/0ply0", "SFB": "/m/0ply0"},
        "type": 3,
        "infoLists": ["MCO", "SFB"],
        "text": "/m/0ply0",
        "code": null,
        "desc": "Orlando, Florida, USA"
    },
    "Boston": {
        "cityMap": {"BOS": "/m/01cx_"},
        "type": 3,
        "infoLists": ["BOS"],
        "text": "/m/01cx_",
        "code": null,
        "desc": "Boston, Massachusetts, USA"
    },
    "Guwahati": {
        "cityMap": {"GAU": "/m/03fxfy"},
        "type": 3,
        "infoLists": ["GAU"],
        "text": "/m/03fxfy",
        "code": null,
        "desc": "Guwahati, Assam, India"
    },
    "Agartala": {
        "cityMap": {"IXA": "/m/0294zw"},
        "type": 3,
        "infoLists": ["IXA"],
        "text": "/m/0294zw",
        "code": null,
        "desc": "Agartala, Tripura, India"
    },
    "Athens": {
        "cityMap": {"ATH": "/m/0n2z"},
        "type": 3,
        "infoLists": ["ATH"],
        "text": "/m/0n2z",
        "code": null,
        "desc": "Athens, Greece"
    },
    "Istanbul": {
        "cityMap": {"SAW": "/m/09949m", "IST": "/m/09949m"},
        "type": 3,
        "infoLists": ["SAW", "IST"],
        "text": "/m/09949m",
        "code": null,
        "desc": "İstanbul, Türkiye"
    },
    "Fresno": {
        "cityMap": {"FAT": "/m/0mzy7"},
        "type": 3,
        "infoLists": ["FAT"],
        "text": "/m/0mzy7",
        "code": null,
        "desc": "Fresno, California, USA"
    },
    "Guadalajara": {
        "cityMap": {"GDL": "/m/0jp26"},
        "type": 3,
        "infoLists": ["GDL"],
        "text": "/m/0jp26",
        "code": null,
        "desc": "Guadalajara, Mexico"
    },
    "Ixtapa/Zihuatanejo": {
        "cityMap": {},
        "type": 1,
        "text": "/m/06ryrt",
        "code": "ZIH",
        "desc": "Ixtapa-Zihuatanejo International Airport"
    },
    "Tokyo": {
        "cityMap": {"HND": "/m/07dfk", "NRT": "/m/07dfk"},
        "type": 3,
        "infoLists": ["HND", "NRT"],
        "text": "/m/07dfk",
        "code": null,
        "desc": "Tokyo, Japan"
    },
    "Sydney": {
        "cityMap": {"SYD": "/m/06y57"},
        "type": 3,
        "infoLists": ["SYD"],
        "text": "/m/06y57",
        "code": null,
        "desc": "Sydney, Australia"
    },
    "New York": {
        "cityMap": {"JFK": "/m/02_286", "LGA": "/m/02_286", "EWR": "/m/0hptm"},
        "type": 3,
        "infoLists": ["JFK", "LGA", "EWR"],
        "text": "/m/02_286",
        "code": null,
        "desc": "New York, USA"
    },
    "Punta Cana": {
        "cityMap": {"PUJ": "/m/05sc7g"},
        "type": 3,
        "infoLists": ["PUJ"],
        "text": "/m/05sc7g",
        "code": null,
        "desc": "Punta Cana, Dominican Republic"
    },
    "Guatemala City": {
        "cityMap": {"GUA": "/m/0346h"},
        "type": 3,
        "infoLists": ["GUA"],
        "text": "/m/0346h",
        "code": null,
        "desc": "Guatemala City, Guatemala"
    },
    "Bagdogra": {
        "cityMap": {"IXB": "/m/064r9b6"},
        "type": 3,
        "infoLists": ["IXB"],
        "text": "/m/064r9b6",
        "code": null,
        "desc": "Bagdogra, West Bengal, India"
    },
    "Kolkata": {
        "cityMap": {"CCU": "/m/0cvw9"},
        "type": 3,
        "infoLists": ["CCU"],
        "text": "/m/0cvw9",
        "code": null,
        "desc": "Kolkata, West Bengal, India"
    },
    "Houston": {
        "cityMap": {"IAH": "/m/03l2n", "HOU": "/m/03l2n"},
        "type": 3,
        "infoLists": ["IAH", "HOU"],
        "text": "/m/03l2n",
        "code": null,
        "desc": "Houston, Texas, USA"
    },
    "Las Vegas": {
        "cityMap": {"LAS": "/m/0cv3w"},
        "type": 3,
        "infoLists": ["LAS"],
        "text": "/m/0cv3w",
        "code": null,
        "desc": "Las Vegas, Nevada, USA"
    },
    "San Jose": {
        "cityMap": {"SJC": "/m/0f04v", "SFO": "/m/0d6lp"},
        "type": 3,
        "infoLists": ["SJC", "SFO"],
        "text": "/m/0f04v",
        "code": null,
        "desc": "San Jose, California, USA"
    },
    "Okinawa": {
        "cityMap": {"OKA": "/m/0gp71x"},
        "type": 3,
        "infoLists": ["OKA"],
        "text": "/m/035xyz",
        "code": null,
        "desc": "Okinawa Island"
    },
    "Atlanta": {
        "cityMap": {"ATL": "/m/013yq"},
        "type": 3,
        "infoLists": ["ATL"],
        "text": "/m/013yq",
        "code": null,
        "desc": "Atlanta, Georgia, USA"
    },
    "Bangkok": {
        "cityMap": {"BKK": "/m/0fn2g", "DMK": "/m/0fn2g"},
        "type": 3,
        "infoLists": ["BKK", "DMK"],
        "text": "/m/0fn2g",
        "code": null,
        "desc": "Bangkok, Thailand"
    },
    "Phuket": {
        "cityMap": {"HKT": "/m/0f_r1_"},
        "type": 3,
        "infoLists": ["HKT"],
        "text": "/m/0f_r1_",
        "code": null,
        "desc": "Phuket, Thailand"
    },
    "Manila": {
        "cityMap": {"MNL": "/m/0195pd"},
        "type": 3,
        "infoLists": ["MNL"],
        "text": "/m/0195pd",
        "code": null,
        "desc": "Manila, Philippines"
    },
    "Minneapolis/St Paul": {"type": 1, "code": "MSP"},
    "Dallas": {
        "cityMap": {"DFW": "/m/0f2rq", "DAL": "/m/0f2rq"},
        "type": 3,
        "infoLists": ["DFW", "DAL"],
        "text": "/m/0f2rq",
        "code": null,
        "desc": "Dallas, Texas, USA"
    },
    "Caticlan": {
        "cityMap": {"MPH": "/g/1v2ktzw6"},
        "type": 3,
        "infoLists": ["MPH"],
        "text": "/g/1v2ktzw6",
        "code": null,
        "desc": "Caticlan, Philippines"
    },
    "Palm Springs": {
        "cityMap": {"PSP": "/m/0r3tq"},
        "type": 3,
        "infoLists": ["PSP"],
        "text": "/m/0r3tq",
        "code": null,
        "desc": "Palm Springs, California, USA"
    },
    "Lima": {
        "cityMap": {"LIM": "/m/0lpfh"},
        "type": 3,
        "infoLists": ["LIM"],
        "text": "/m/0lpfh",
        "code": null,
        "desc": "Lima, Peru"
    },
    "Dalat": {
        "cityMap": {"DLI": "/m/06cl9r"},
        "type": 3,
        "infoLists": ["DLI"],
        "text": "/m/06cl9r",
        "code": null,
        "desc": "Dalat, Vietnam"
    },
    "Hanoi": {
        "cityMap": {"HAN": "/m/0fnff"},
        "type": 3,
        "infoLists": ["HAN"],
        "text": "/m/0fnff",
        "code": null,
        "desc": "Hanoi, Vietnam"
    },
    "Brandon": {
        "cityMap": {"YWG": "/m/0pmq2", "YBR": "/m/01kxnd"},
        "type": 3,
        "infoLists": ["YWG", "YBR"],
        "text": "/m/01kxnd",
        "code": null,
        "desc": "Brandon, Manitoba, Canada"
    },
    "Thunder Bay": {
        "cityMap": {"YQT": "/m/01gb_p"},
        "type": 3,
        "infoLists": ["YQT"],
        "text": "/m/01gb_p",
        "code": null,
        "desc": "Thunder Bay, Ontario, Canada"
    },
    "Marrakech": {
        "cityMap": {"RAK": "/m/054rw"},
        "type": 3,
        "infoLists": ["RAK"],
        "text": "/m/054rw",
        "code": null,
        "desc": "Marrakesh, Morocco"
    },
    "Porto": {
        "cityMap": {"OPO": "/m/0pmn7"},
        "type": 3,
        "infoLists": ["OPO"],
        "text": "/m/0pmn7",
        "code": null,
        "desc": "Porto, Portugal"
    },
    "Dhaka": {
        "cityMap": {"DAC": "/m/0fnb4"},
        "type": 3,
        "infoLists": ["DAC"],
        "text": "/m/0fnb4",
        "code": null,
        "desc": "Dhaka, Bangladesh"
    },
    "Delhi": {
        "cityMap": {"DEL": "/m/0dlv0"},
        "type": 3,
        "infoLists": ["DEL"],
        "text": "/m/0dlv0",
        "code": null,
        "desc": "New Delhi, India"
    },
    "San Antonio": {
        "cityMap": {"SAT": "/m/0f2w0"},
        "type": 3,
        "infoLists": ["SAT"],
        "text": "/m/0f2w0",
        "code": null,
        "desc": "San Antonio, Texas, USA"
    },
    "San Diego": {
        "cityMap": {"SAN": "/m/071vr"},
        "type": 3,
        "infoLists": ["SAN"],
        "text": "/m/071vr",
        "code": null,
        "desc": "San Diego, California, USA"
    },
    "San Salvador": {
        "cityMap": {"SAL": "/m/0ftfw"},
        "type": 3,
        "infoLists": ["SAL"],
        "text": "/m/0ftfw",
        "code": null,
        "desc": "San Salvador, El Salvador"
    },
    "Barbados": {
        "cityMap": {"BGI": "/m/0fn5r"},
        "type": 3,
        "infoLists": ["BGI"],
        "text": "/m/0162v",
        "code": null,
        "desc": "Barbados"
    },
    "Chicago": {
        "cityMap": {"ORD": "/m/01_d4", "MDW": "/m/01_d4"},
        "type": 3,
        "infoLists": ["ORD", "MDW"],
        "text": "/m/01_d4",
        "code": null,
        "desc": "Chicago, Illinois, USA"
    },
    "Kelowna": {
        "cityMap": {"YLW": "/m/01gb_7"},
        "type": 3,
        "infoLists": ["YLW"],
        "text": "/m/01gb_7",
        "code": null,
        "desc": "Kelowna, British Columbia, Canada"
    },
    "Victoria": {
        "cityMap": {"YYJ": "/m/07ypt"},
        "type": 3,
        "infoLists": ["YYJ"],
        "text": "/m/07ypt",
        "code": null,
        "desc": "Victoria, British Columbia, Canada"
    },
    "Taipei": {
        "cityMap": {"TPE": "/m/0ftkx", "TSA": "/m/0ftkx"},
        "type": 3,
        "infoLists": ["TPE", "TSA"],
        "text": "/m/0ftkx",
        "code": null,
        "desc": "Taipei City, Taiwan"
    },
    "Sendai": {
        "cityMap": {"SDJ": "/m/01wr43"},
        "type": 3,
        "infoLists": ["SDJ"],
        "text": "/m/01wr43",
        "code": null,
        "desc": "Sendai, Japan"
    },
    "Baltimore": {
        "cityMap": {"BWI": "/m/094jv", "IAD": "/m/0rh6k", "DCA": "/m/0rh6k"},
        "type": 3,
        "infoLists": ["BWI", "IAD", "DCA"],
        "text": "/m/094jv",
        "code": null,
        "desc": "Baltimore, Maryland, USA"
    },
    "Fort Lauderdale": {
        "cityMap": {"FLL": "/m/0rj0z", "MIA": "/m/0f2v0"},
        "type": 3,
        "infoLists": ["FLL", "MIA"],
        "text": "/m/0rj0z",
        "code": null,
        "desc": "Fort Lauderdale, Florida, USA"
    },
    "Ahmedabad": {
        "cityMap": {"AMD": "/m/01d88c"},
        "type": 3,
        "infoLists": ["AMD"],
        "text": "/m/01d88c",
        "code": null,
        "desc": "Ahmedabad, Gujarat, India"
    },
    "Cleveland": {
        "cityMap": {"CLE": "/m/01sn3"},
        "type": 3,
        "infoLists": ["CLE"],
        "text": "/m/01sn3",
        "code": null,
        "desc": "Cleveland, Ohio, USA"
    },
    "Da Nang": {
        "cityMap": {"DAD": "/m/026yqf"},
        "type": 3,
        "infoLists": ["DAD"],
        "text": "/m/026yqf",
        "code": null,
        "desc": "Da Nang, Vietnam"
    },
    "Nashville": {
        "cityMap": {"BNA": "/m/05jbn"},
        "type": 3,
        "infoLists": ["BNA"],
        "text": "/m/05jbn",
        "code": null,
        "desc": "Nashville, Tennessee, USA"
    },
    "Washington": {
        "cityMap": {"DCA": "/m/0rh6k", "IAD": "/m/0rh6k", "BWI": "/m/094jv"},
        "type": 3,
        "infoLists": ["DCA", "IAD", "BWI"],
        "text": "/m/0rh6k",
        "code": null,
        "desc": "Washington, USA"
    },
    "Perth": {
        "cityMap": {"PER": "/m/062qg"},
        "type": 3,
        "infoLists": ["PER"],
        "text": "/m/062qg",
        "code": null,
        "desc": "Perth, Australia"
    },
    "Christchurch": {
        "cityMap": {"CHC": "/m/02yc5b"},
        "type": 3,
        "infoLists": ["CHC"],
        "text": "/m/02yc5b",
        "code": null,
        "desc": "Christchurch, New Zealand"
    },
    "Arusha": {
        "cityMap": {"JRO": "/m/01513b", "ARK": "/m/01_fpx"},
        "type": 3,
        "infoLists": ["JRO", "ARK"],
        "text": "/m/09gdh4",
        "code": null,
        "desc": "Arusha National Park, Tanzania"
    },
    "Zanzibar": {
        "cityMap": {"ZNZ": "/m/047vq3s"},
        "type": 3,
        "infoLists": ["ZNZ"],
        "text": "/g/11x9yrt6b",
        "code": null,
        "desc": "Zanzibar, Tanzania"
    },
    "Tampa": {
        "cityMap": {"TPA": "/m/0n1rj"},
        "type": 3,
        "infoLists": ["TPA"],
        "text": "/m/0n1rj",
        "code": null,
        "desc": "Tampa, Florida, USA"
    },
    "Providence": {
        "cityMap": {"PVD": "/m/0c1d0", "BOS": "/m/01cx_"},
        "type": 3,
        "infoLists": ["PVD", "BOS"],
        "text": "/m/0c1d0",
        "code": null,
        "desc": "Providence, Rhode Island, USA"
    },
    "Halifax": {
        "cityMap": {"YHZ": "/m/02qjb7z"},
        "type": 3,
        "infoLists": ["YHZ"],
        "text": "/m/02qjb7z",
        "code": null,
        "desc": "Halifax, Nova Scotia, Canada"
    },
    "Denpasar-Bali": {"type": 1, "code": "DPS"},
    "Medellin": {
        "cityMap": {"MDE": "/m/01x_6s"},
        "type": 3,
        "infoLists": ["MDE"],
        "text": "/m/01x_6s",
        "code": null,
        "desc": "Medellín, Colombia"
    },
    "Kalispell": {
        "cityMap": {"FCA": "/m/0x1vt"},
        "type": 3,
        "infoLists": ["FCA"],
        "text": "/m/0x1vt",
        "code": null,
        "desc": "Kalispell, Montana, USA"
    },
    "Sao Paulo": {"type": 1, "code": "SAO"},
    "Beijing": {
        "cityMap": {"PEK": "/m/01914", "PKX": "/m/01914"},
        "type": 3,
        "infoLists": ["PEK", "PKX"],
        "text": "/m/01914",
        "code": null,
        "desc": "Beijing, China"
    },
    "San Juan": {
        "cityMap": {"SJU": "/m/0fw4v"},
        "type": 3,
        "infoLists": ["SJU"],
        "text": "/m/0fw4v",
        "code": null,
        "desc": "San Juan, Puerto Rico"
    },
    "Ho Chi Minh City": {
        "cityMap": {"SGN": "/m/0hn4h"},
        "type": 3,
        "infoLists": ["SGN"],
        "text": "/m/0hn4h",
        "code": null,
        "desc": "Ho Chi Minh City, Vietnam"
    },
    "Berlin": {
        "cityMap": {"BER": "/m/0156q"},
        "type": 3,
        "infoLists": ["BER"],
        "text": "/m/0156q",
        "code": null,
        "desc": "Berlin, Germany"
    },
    "Austin": {
        "cityMap": {"AUS": "/m/0vzm"},
        "type": 3,
        "infoLists": ["AUS"],
        "text": "/m/0vzm",
        "code": null,
        "desc": "Austin, Texas, USA"
    },
    "Ayodhya": {
        "cityMap": {"LKO": "/m/022tq4", "AYJ": "/m/0bkr3"},
        "type": 3,
        "infoLists": ["LKO", "AYJ"],
        "text": "/m/0bkr3",
        "code": null,
        "desc": "Ayodhya, Uttar Pradesh, India"
    },
    "Seattle": {
        "cityMap": {"SEA": "/m/0d9jr"},
        "type": 3,
        "infoLists": ["SEA"],
        "text": "/m/0d9jr",
        "code": null,
        "desc": "Seattle, Washington, USA"
    },
    "Regina": {
        "cityMap": {"YQR": "/m/0pmpl"},
        "type": 3,
        "infoLists": ["YQR"],
        "text": "/m/0pmpl",
        "code": null,
        "desc": "Regina, Saskatchewan, Canada"
    },
    "Hartford": {
        "cityMap": {"BDL": "/m/0f1sm"},
        "type": 3,
        "infoLists": ["BDL"],
        "text": "/m/0f1sm",
        "code": null,
        "desc": "Hartford, Connecticut, USA"
    },
    "London": {
        "cityMap": {
            "LHR": "/m/04jpl",
            "STN": "/m/04jpl",
            "LGW": "/m/04jpl",
            "LTN": "/m/04jpl",
            "LCY": "/m/04jpl",
            "SEN": "/m/04jpl"
        },
        "type": 3,
        "infoLists": ["LHR", "STN", "LGW", "LTN", "LCY", "SEN"],
        "text": "/m/04jpl",
        "code": null,
        "desc": "London, United Kingdom"
    },
    "Fukuoka": {
        "cityMap": {"FUK": "/m/0gqkd"},
        "type": 3,
        "infoLists": ["FUK"],
        "text": "/m/0gqkd",
        "code": null,
        "desc": "Fukuoka, Japan"
    },
    "Bengaluru": {
        "cityMap": {"BLR": "/m/09c17"},
        "type": 3,
        "infoLists": ["BLR"],
        "text": "/m/09c17",
        "code": null,
        "desc": "Bengaluru, Karnataka, India"
    },
    "Chandigarh": {
        "cityMap": {"IXC": "/m/01f1q8", "DEL": "/m/0dlv0"},
        "type": 3,
        "infoLists": ["IXC", "DEL"],
        "text": "/m/01f1q8",
        "code": null,
        "desc": "Chandigarh, India"
    },
    "Portland": {
        "cityMap": {"PDX": "/m/02frhbc"},
        "type": 3,
        "infoLists": ["PDX"],
        "text": "/m/02frhbc",
        "code": null,
        "desc": "Portland, Oregon, USA"
    },
    "Jaipur": {
        "cityMap": {"JAI": "/m/016722"},
        "type": 3,
        "infoLists": ["JAI"],
        "text": "/m/016722",
        "code": null,
        "desc": "Jaipur, Rajasthan, India"
    },
    "Hyderabad": {
        "cityMap": {"HYD": "/m/09c6w"},
        "type": 3,
        "infoLists": ["HYD"],
        "text": "/m/09c6w",
        "code": null,
        "desc": "Hyderabad, Telangana, India"
    },
    "Sapporo": {
        "cityMap": {"CTS": "/m/0gp5l6", "OKD": "/m/0gp5l6"},
        "type": 3,
        "infoLists": ["CTS", "OKD"],
        "text": "/m/0gp5l6",
        "code": null,
        "desc": "Sapporo, Japan"
    },
    "Kuala Lumpur": {
        "cityMap": {"KUL": "/m/049d1", "SZB": "/m/049d1"},
        "type": 3,
        "infoLists": ["KUL", "SZB"],
        "text": "/m/049d1",
        "code": null,
        "desc": "Federal Territory of Kuala Lumpur, Malaysia"
    },
    "Cancun": {
        "cityMap": {"CUN": "/m/01q98m"},
        "type": 3,
        "infoLists": ["CUN"],
        "text": "/m/01q98m",
        "code": null,
        "desc": "Cancún, Mexico"
    },
    "Bogota": {
        "cityMap": {"BOG": "/m/01dzyc"},
        "type": 3,
        "infoLists": ["BOG"],
        "text": "/m/01dzyc",
        "code": null,
        "desc": "Bogotá, Colombia"
    },
    "Montreal": {
        "cityMap": {"YUL": "/m/052p7", "YHU": "/m/052p7"},
        "type": 3,
        "infoLists": ["YUL", "YHU"],
        "text": "/m/052p7",
        "code": null,
        "desc": "Montreal, Quebec, Canada"
    },
    "Lisbon": {
        "cityMap": {"LIS": "/m/04llb"},
        "type": 3,
        "infoLists": ["LIS"],
        "text": "/m/04llb",
        "code": null,
        "desc": "Lisbon, Portugal"
    },
    "Goa": {
        "cityMap": {"GOI": "/m/01c1nm", "GOX": "/m/01c1nm"},
        "type": 3,
        "infoLists": ["GOI", "GOX"],
        "text": "/m/01c1nm",
        "code": null,
        "desc": "Goa, India"
    },
    "Nagoya": {
        "cityMap": {"NGO": "/m/0gqfy", "NKM": "/m/0gqfy"},
        "type": 3,
        "infoLists": ["NGO", "NKM"],
        "text": "/m/0gqfy",
        "code": null,
        "desc": "Nagoya, Japan"
    },
    "Brisbane": {
        "cityMap": {"BNE": "/m/01b8jj"},
        "type": 3,
        "infoLists": ["BNE"],
        "text": "/m/01b8jj",
        "code": null,
        "desc": "Brisbane, Australia"
    },
    "Paris": {
        "cityMap": {"CDG": "/m/05qtj", "ORY": "/m/05qtj", "BVA": "/m/05qtj"},
        "type": 3,
        "infoLists": ["CDG", "ORY", "BVA"],
        "text": "/m/05qtj",
        "code": null,
        "desc": "Paris, France"
    },
    "Varanasi": {
        "cityMap": {"VNS": "/m/01j922"},
        "type": 3,
        "infoLists": ["VNS"],
        "text": "/m/01j922",
        "code": null,
        "desc": "Varanasi, Uttar Pradesh, India"
    },
    "Shenzhen": {
        "cityMap": {"SZX": "/m/0lbmv"},
        "type": 3,
        "infoLists": ["SZX"],
        "text": "/m/0lbmv",
        "code": null,
        "desc": "Shenzhen, China"
    },
    "Singapore": {
        "cityMap": {"SIN": "/m/06t2t", "XSP": "/m/06t2t"},
        "type": 3,
        "infoLists": ["SIN", "XSP"],
        "text": "/m/06t2t",
        "code": null,
        "desc": "Singapore"
    },
    "Dumaguete": {
        "cityMap": {"DGT": "/m/02wns0"},
        "type": 3,
        "infoLists": ["DGT"],
        "text": "/m/02wns0",
        "code": null,
        "desc": "Dumaguete, Philippines"
    },
    "Phuquoc": {
        "cityMap": {"PQC": "/m/05mpn7"},
        "type": 3,
        "infoLists": ["PQC"],
        "text": "/m/05mpn7",
        "code": null,
        "desc": "Phú Quốc, Vietnam"
    },
    "St Maarten": {"type": 1, "code": "SXM"},
    "Busan": {
        "cityMap": {"PUS": "/m/0hv7l"},
        "type": 3,
        "infoLists": ["PUS"],
        "text": "/m/0hv7l",
        "code": null,
        "desc": "Busan, South Korea"
    },
    "Detroit": {
        "cityMap": {"DTW": "/m/02dtg"},
        "type": 3,
        "infoLists": ["DTW"],
        "text": "/m/02dtg",
        "code": null,
        "desc": "Detroit, Michigan, USA"
    },
    "Kuwait": {
        "cityMap": {"KWI": "/m/0fq5j"},
        "type": 3,
        "infoLists": ["KWI"],
        "text": "/m/0fq5j",
        "code": null,
        "desc": "Kuwait City, Kuwait"
    },
    "Melbourne": {
        "cityMap": {"MEL": "/m/0chgzm", "AVV": "/m/0chgzm", "MEB": "/m/0chgzm"},
        "type": 3,
        "infoLists": ["MEL", "AVV", "MEB"],
        "text": "/m/0chgzm",
        "code": null,
        "desc": "Melbourne, Australia"
    },
    "Charlotte": {
        "cityMap": {"CLT": "/m/0fsb8"},
        "type": 3,
        "infoLists": ["CLT"],
        "text": "/m/0fsb8",
        "code": null,
        "desc": "Charlotte, North Carolina, USA"
    },
    "Santo Domingo": {
        "cityMap": {"SDQ": "/m/0fthl"},
        "type": 3,
        "infoLists": ["SDQ"],
        "text": "/m/0fthl",
        "code": null,
        "desc": "Santo Domingo, Dominican Republic"
    },
    "Saskatoon": {
        "cityMap": {"YXE": "/m/018d5b"},
        "type": 3,
        "infoLists": ["YXE"],
        "text": "/m/018d5b",
        "code": null,
        "desc": "Saskatoon, Saskatchewan, Canada"
    },
    "Shanghai": {
        "cityMap": {"PVG": "/m/06wjf", "SHA": "/m/06wjf"},
        "type": 3,
        "infoLists": ["PVG", "SHA"],
        "text": "/m/06wjf",
        "code": null,
        "desc": "Shanghai, China"
    },
    "Amsterdam": {
        "cityMap": {"AMS": "/m/0k3p"},
        "type": 3,
        "infoLists": ["AMS"],
        "text": "/m/0k3p",
        "code": null,
        "desc": "Amsterdam, Netherlands"
    },
    "Chiang Mai": {
        "cityMap": {"CNX": "/m/01hr58"},
        "type": 3,
        "infoLists": ["CNX"],
        "text": "/m/01hr58",
        "code": null,
        "desc": "Chiang Mai, Thailand"
    },
    "Barcelona": {
        "cityMap": {"BCN": "/m/01f62"},
        "type": 3,
        "infoLists": ["BCN"],
        "text": "/m/01f62",
        "code": null,
        "desc": "Barcelona, Spain"
    },
    "Palma De Mallorca": {
        "cityMap": {},
        "type": 1,
        "text": "/m/07_jbg",
        "code": "PMI",
        "desc": "Palma de Mallorca Airport"
    },
    "Karachi": {
        "cityMap": {"KHI": "/m/04cjn"},
        "type": 3,
        "infoLists": ["KHI"],
        "text": "/m/04cjn",
        "code": null,
        "desc": "Karachi, Pakistan"
    },
    "Sharjah": {
        "cityMap": {"DXB": "/m/01f08r", "SHJ": "/m/03w9gtf", "DWC": "/m/01f08r"},
        "type": 3,
        "infoLists": ["DXB", "SHJ", "DWC"],
        "text": "/m/03w9gtf",
        "code": null,
        "desc": "Sharjah - United Arab Emirates"
    },
    "Thira": {
        "cityMap": {"JTR": "/m/070t9"},
        "type": 3,
        "infoLists": ["JTR"],
        "text": "/m/0gh803s",
        "code": null,
        "desc": "Thira, Greece"
    },
    "Naples": {
        "cityMap": {"NAP": "/m/0fhsz"},
        "type": 3,
        "infoLists": ["NAP"],
        "text": "/m/0fhsz",
        "code": null,
        "desc": "Naples, Italy"
    },
    "Miami": {
        "cityMap": {"MIA": "/m/0f2v0", "FLL": "/m/0rj0z"},
        "type": 3,
        "infoLists": ["MIA", "FLL"],
        "text": "/m/0f2v0",
        "code": null,
        "desc": "Miami, Florida, USA"
    },
    "Riyadh": {
        "cityMap": {"RUH": "/m/0dlm_"},
        "type": 3,
        "infoLists": ["RUH"],
        "text": "/m/0dlm_",
        "code": null,
        "desc": "Riyadh Saudi Arabia"
    },
    "Jeddah": {
        "cityMap": {"JED": "/m/01pk8b"},
        "type": 3,
        "infoLists": ["JED"],
        "text": "/m/01pk8b",
        "code": null,
        "desc": "Jeddah Saudi Arabia"
    },
    "Hakodate": {
        "cityMap": {"HKD": "/m/01d0xr"},
        "type": 3,
        "infoLists": ["HKD"],
        "text": "/m/01d0xr",
        "code": null,
        "desc": "Hakodate, Japan"
    },
    "Cincinnati": {
        "cityMap": {"CVG": "/m/01snm"},
        "type": 3,
        "infoLists": ["CVG"],
        "text": "/m/01snm",
        "code": null,
        "desc": "Cincinnati, Ohio, USA"
    },
    "Indore": {
        "cityMap": {"IDR": "/m/01_yvy"},
        "type": 3,
        "infoLists": ["IDR"],
        "text": "/m/01_yvy",
        "code": null,
        "desc": "Indore, Madhya Pradesh, India"
    },
    "Mazatlan": {
        "cityMap": {"MZT": "/m/02n49j"},
        "type": 3,
        "infoLists": ["MZT"],
        "text": "/m/02n49j",
        "code": null,
        "desc": "Mazatlan, Mexico"
    },
    "Guangzhou": {
        "cityMap": {"CAN": "/m/0393g"},
        "type": 3,
        "infoLists": ["CAN"],
        "text": "/m/0393g",
        "code": null,
        "desc": "Guangzhou, China"
    },
    "Jabalpur": {
        "cityMap": {"JLR": "/m/02drnk"},
        "type": 3,
        "infoLists": ["JLR"],
        "text": "/m/02drnk",
        "code": null,
        "desc": "Jabalpur, Madhya Pradesh, India"
    },
    "Mumbai": {
        "cityMap": {"BOM": "/m/04vmp"},
        "type": 3,
        "infoLists": ["BOM"],
        "text": "/m/04vmp",
        "code": null,
        "desc": "Mumbai, Maharashtra, India"
    },
    "Cochin": {
        "cityMap": {"COK": "/m/0fl2s"},
        "type": 3,
        "infoLists": ["COK"],
        "text": "/m/0fl2s",
        "code": null,
        "desc": "Kochi, Kerala, India"
    },
    "Jakarta": {
        "cityMap": {"CGK": "/m/044rv", "HLP": "/m/044rv"},
        "type": 3,
        "infoLists": ["CGK", "HLP"],
        "text": "/m/044rv",
        "code": null,
        "desc": "Jakarta, Indonesia"
    },
    "Labuan Bajo": {
        "cityMap": {"LBJ": "/m/09v4h8p"},
        "type": 3,
        "infoLists": ["LBJ"],
        "text": "/m/09v4h8p",
        "code": null,
        "desc": "Labuan Bajo, Indonesia"
    },
    "Kahului": {
        "cityMap": {"OGG": "/m/0s0gz"},
        "type": 3,
        "infoLists": ["OGG"],
        "text": "/m/0s0gz",
        "code": null,
        "desc": "Kahului, Hawaii, USA"
    },
    "Cebu": {
        "cityMap": {"CEB": "/m/01p_ly"},
        "type": 3,
        "infoLists": ["CEB"],
        "text": "/m/01p_ly",
        "code": null,
        "desc": "Cebu City, Philippines"
    },
    "Tehran": {
        "cityMap": {"IKA": "/m/0ftlx"},
        "type": 3,
        "infoLists": ["IKA"],
        "text": "/m/0ftlx",
        "code": null,
        "desc": "Tehran, Iran"
    },
    "Patna": {
        "cityMap": {"PAT": "/m/027wvb"},
        "type": 3,
        "infoLists": ["PAT"],
        "text": "/m/027wvb",
        "code": null,
        "desc": "Patna, Bihar, India"
    },
    "San Jose Cabo": {
        "cityMap": {"SJD": "/m/0310cy"},
        "type": 3,
        "infoLists": ["SJD"],
        "text": "/m/0310cy",
        "code": null,
        "desc": "San José del Cabo, Mexico"
    },
    "Mexicali": {
        "cityMap": {"MXL": "/m/01n8m_", "TIJ": "/m/0pswc"},
        "type": 3,
        "infoLists": ["MXL", "TIJ"],
        "text": "/m/01n8m_",
        "code": null,
        "desc": "Mexicali, Mexico"
    },
    "Culiacan": {
        "cityMap": {"CUL": "/m/01gmml"},
        "type": 3,
        "infoLists": ["CUL"],
        "text": "/m/01gmml",
        "code": null,
        "desc": "Culiacán, Mexico"
    },
    "Sacramento": {
        "cityMap": {"SMF": "/m/07bcn"},
        "type": 3,
        "infoLists": ["SMF"],
        "text": "/m/07bcn",
        "code": null,
        "desc": "Sacramento, California, USA"
    },
    "Lagos": {
        "cityMap": {"LOS": "/m/0lnfy"},
        "type": 3,
        "infoLists": ["LOS"],
        "text": "/m/0lnfy",
        "code": null,
        "desc": "Lagos, Nigeria"
    },
    "Dublin": {
        "cityMap": {"DUB": "/m/02cft"},
        "type": 3,
        "infoLists": ["DUB"],
        "text": "/m/02cft",
        "code": null,
        "desc": "Dublin, Ireland"
    },
    "Chania": {
        "cityMap": {"CHQ": "/m/0g86h"},
        "type": 3,
        "infoLists": ["CHQ"],
        "text": "/m/0g86h",
        "code": null,
        "desc": "Chania, Greece"
    },
    "Adelaide": {
        "cityMap": {"ADL": "/m/0mgp"},
        "type": 3,
        "infoLists": ["ADL"],
        "text": "/m/0mgp",
        "code": null,
        "desc": "Adelaide, Australia"
    },
    "Milan": {
        "cityMap": {"MXP": "/m/0947l", "BGY": "/m/0947l", "LIN": "/m/0947l"},
        "type": 3,
        "infoLists": ["MXP", "BGY", "LIN"],
        "text": "/m/0947l",
        "code": null,
        "desc": "Milan, Italy"
    },
    "Casablanca": {
        "cityMap": {"CMN": "/m/022b_"},
        "type": 3,
        "infoLists": ["CMN"],
        "text": "/m/022b_",
        "code": null,
        "desc": "Casablanca, Morocco"
    },
    "Langkawi": {
        "cityMap": {"LGK": "/m/026m5r"},
        "type": 3,
        "infoLists": ["LGK"],
        "text": "/m/026m5r",
        "code": null,
        "desc": "Langkawi, Malaysia"
    },
    "Daegu": {
        "cityMap": {"TAE": "/m/01vskn", "PUS": "/m/0hv7l"},
        "type": 3,
        "infoLists": ["TAE", "PUS"],
        "text": "/m/01vskn",
        "code": null,
        "desc": "Daegu, South Korea"
    },
    "Denver": {
        "cityMap": {"DEN": "/m/02cl1"},
        "type": 3,
        "infoLists": ["DEN"],
        "text": "/m/02cl1",
        "code": null,
        "desc": "Denver, Colorado, USA"
    },
    "Marseille": {
        "cityMap": {"MRS": "/m/0jdtt"},
        "type": 3,
        "infoLists": ["MRS"],
        "text": "/m/0jdtt",
        "code": null,
        "desc": "Marseille, France"
    },
    "Rennes": {
        "cityMap": {"NTE": "/m/0hqzr", "RNS": "/m/0chjm"},
        "type": 3,
        "infoLists": ["NTE", "RNS"],
        "text": "/m/0chjm",
        "code": null,
        "desc": "Rennes, France"
    },
    "Thiruvananthapuram": {
        "cityMap": {"COK": "/m/0fl2s", "TRV": "/m/0fk98"},
        "type": 3,
        "infoLists": ["COK", "TRV"],
        "text": "/m/0fk98",
        "code": null,
        "desc": "Thiruvananthapuram, Kerala, India"
    },
    "Kota Kinabalu": {
        "cityMap": {"BKI": "/m/01_g7f"},
        "type": 3,
        "infoLists": ["BKI"],
        "text": "/m/01_g7f",
        "code": null,
        "desc": "Kota Kinabalu, Malaysia"
    },
    "Alicante": {
        "cityMap": {"ALC": "/m/0zc6"},
        "type": 3,
        "infoLists": ["ALC"],
        "text": "/m/0zc6",
        "code": null,
        "desc": "Alicante, Spain"
    },
    "Manchester": {
        "cityMap": {"MAN": "/m/052bw"},
        "type": 3,
        "infoLists": ["MAN"],
        "text": "/m/052bw",
        "code": null,
        "desc": "Manchester, United Kingdom"
    },
    "Rome": {
        "cityMap": {"FCO": "/m/06c62", "CIA": "/m/06c62"},
        "type": 3,
        "infoLists": ["FCO", "CIA"],
        "text": "/m/06c62",
        "code": null,
        "desc": "Rome, Italy"
    },
    "Darwin": {
        "cityMap": {"DRW": "/m/02bm8"},
        "type": 3,
        "infoLists": ["DRW"],
        "text": "/m/02bm8",
        "code": null,
        "desc": "Darwin, Australia"
    },
    "Montego Bay": {
        "cityMap": {"MBJ": "/m/023d7v"},
        "type": 3,
        "infoLists": ["MBJ"],
        "text": "/m/023d7v",
        "code": null,
        "desc": "Montego Bay, Jamaica"
    },
    "Guayaquil": {
        "cityMap": {"GYE": "/m/01fknt"},
        "type": 3,
        "infoLists": ["GYE"],
        "text": "/m/01fknt",
        "code": null,
        "desc": "Guayaquil, Ecuador"
    },
    "Bhubaneshwar": {
        "cityMap": {"BBI": "/m/03czqs"},
        "type": 3,
        "infoLists": ["BBI"],
        "text": "/m/03czqs",
        "code": null,
        "desc": "Bhubaneswar, Odisha, India"
    },
    "Kitakyushu": {
        "cityMap": {"KKJ": "/m/0gp6vr", "FUK": "/m/0gqkd"},
        "type": 3,
        "infoLists": ["KKJ", "FUK"],
        "text": "/m/0gp6vr",
        "code": null,
        "desc": "Kitakyushu, Japan"
    },
    "Lahore": {
        "cityMap": {"LHE": "/m/0xnt5"},
        "type": 3,
        "infoLists": ["LHE"],
        "text": "/m/0xnt5",
        "code": null,
        "desc": "Lahore, Pakistan"
    },
    "Quito": {
        "cityMap": {"UIO": "/m/01dtq1"},
        "type": 3,
        "infoLists": ["UIO"],
        "text": "/m/01dtq1",
        "code": null,
        "desc": "Quito, Ecuador"
    },
    "Chennai": {
        "cityMap": {"MAA": "/m/0c8tk"},
        "type": 3,
        "infoLists": ["MAA"],
        "text": "/m/0c8tk",
        "code": null,
        "desc": "Chennai, Tamil Nadu, India"
    },
    "Santiago": {
        "cityMap": {"SCL": "/m/0dlqv"},
        "type": 3,
        "infoLists": ["SCL"],
        "text": "/m/0dlqv",
        "code": null,
        "desc": "Santiago, Chile"
    },
    "Ciudad Juarez": {
        "cityMap": {"CJS": "/m/0n06p"},
        "type": 3,
        "infoLists": ["CJS"],
        "text": "/m/0n06p",
        "code": null,
        "desc": "Ciudad Juárez, Mexico"
    },
    "Del Carmen": {"type": 1, "code": "IAO"},
    "Miyazaki": {
        "cityMap": {"KMI": "/m/0gp709"},
        "type": 3,
        "infoLists": ["KMI"],
        "text": "/m/0gp709",
        "code": null,
        "desc": "Miyazaki, Japan"
    },
    "Tunis": {
        "cityMap": {"TUN": "/m/0ftn8"},
        "type": 3,
        "infoLists": ["TUN"],
        "text": "/m/0ftn8",
        "code": null,
        "desc": "Tunis, Tunisia"
    },
    "West Palm Beach": {
        "cityMap": {"PBI": "/m/0rql_", "FLL": "/m/0rj0z"},
        "type": 3,
        "infoLists": ["PBI", "FLL"],
        "text": "/m/0rql_",
        "code": null,
        "desc": "West Palm Beach, Florida, USA"
    },
    "Surabaya": {
        "cityMap": {"SUB": "/m/01f4xd"},
        "type": 3,
        "infoLists": ["SUB"],
        "text": "/m/01f4xd",
        "code": null,
        "desc": "Surabaya, Indonesia"
    },
    "Cuzco": {
        "cityMap": {"CUZ": "/m/0jld3"},
        "type": 3,
        "infoLists": ["CUZ"],
        "text": "/m/0jld3",
        "code": null,
        "desc": "Cusco, Peru"
    },
    "Comox": {
        "cityMap": {"YQQ": "/m/02b291", "YBL": "/m/01wqbh"},
        "type": 3,
        "infoLists": ["YQQ", "YBL"],
        "text": "/m/02b291",
        "code": null,
        "desc": "Comox, British Columbia, Canada"
    },
    "Oita": {
        "cityMap": {"OIT": "/m/0gp6_w"},
        "type": 3,
        "infoLists": ["OIT"],
        "text": "/m/0gp6_w",
        "code": null,
        "desc": "Oita, Japan"
    },
    "Amman": {
        "cityMap": {"AMM": "/m/0c7zf"},
        "type": 3,
        "infoLists": ["AMM"],
        "text": "/m/0c7zf",
        "code": null,
        "desc": "Amman, Jordan"
    },
    "Cairo": {
        "cityMap": {"CAI": "/m/01w2v"},
        "type": 3,
        "infoLists": ["CAI"],
        "text": "/m/01w2v",
        "code": null,
        "desc": "Cairo, Egypt"
    },
    "Tawau": {
        "cityMap": {"TWU": "/m/05rw96"},
        "type": 3,
        "infoLists": ["TWU"],
        "text": "/m/05rw96",
        "code": null,
        "desc": "Tawau, Malaysia"
    },
    "Brussels": {
        "cityMap": {"BRU": "/m/0177z", "CRL": "/m/0177z"},
        "type": 3,
        "infoLists": ["BRU", "CRL"],
        "text": "/m/0177z",
        "code": null,
        "desc": "Brussels, Belgium"
    },
    "Penang": {
        "cityMap": {"PEN": "/m/0g6xq"},
        "type": 3,
        "infoLists": ["PEN"],
        "text": "/m/0g6xq",
        "code": null,
        "desc": "Penang, Malaysia"
    },
    "Malta": {
        "cityMap": {"MLA": "/m/04v3q"},
        "type": 3,
        "infoLists": ["MLA"],
        "text": "/m/04v3q",
        "code": null,
        "desc": "Malta"
    },
    "Frankfurt": {
        "cityMap": {"FRA": "/m/02z0j"},
        "type": 3,
        "infoLists": ["FRA"],
        "text": "/m/02z0j",
        "code": null,
        "desc": "Frankfurt am Main, Germany"
    },
    "Yogyakarta": {
        "cityMap": {"JOG": "/m/0dg6yx", "YIA": "/m/0dg6yx"},
        "type": 3,
        "infoLists": ["JOG", "YIA"],
        "text": "/m/0dg6yx",
        "code": null,
        "desc": "Yogyakarta, Indonesia"
    },
    "Tivat": {
        "cityMap": {"TIV": "/m/03xl5r"},
        "type": 3,
        "infoLists": ["TIV"],
        "text": "/m/03xl5r",
        "code": null,
        "desc": "Tivat, Montenegro"
    },
    "Ljubljana": {
        "cityMap": {"LJU": "/m/0bmm4"},
        "type": 3,
        "infoLists": ["LJU"],
        "text": "/m/0bmm4",
        "code": null,
        "desc": "Ljubljana, Slovenia"
    },
    "Cap Haitien": {
        "cityMap": {"CAP": "/m/02cn5j"},
        "type": 3,
        "infoLists": ["CAP"],
        "text": "/m/02cn5j",
        "code": null,
        "desc": "Cap-Haitien, Haiti"
    },
    "Jeju": {
        "cityMap": {"CJU": "/m/03m9sv"},
        "type": 3,
        "infoLists": ["CJU"],
        "text": "/g/121z6l6y",
        "code": null,
        "desc": "Jeju Island, South Korea"
    },
    "Nassau": {
        "cityMap": {"NAS": "/m/05hcy"},
        "type": 3,
        "infoLists": ["NAS"],
        "text": "/m/05hcy",
        "code": null,
        "desc": "Nassau, Bahamas"
    },
    "Kingston": {
        "cityMap": {"KIN": "/m/09b8m", "MBJ": "/m/023d7v"},
        "type": 3,
        "infoLists": ["KIN", "MBJ"],
        "text": "/m/09b8m",
        "code": null,
        "desc": "Kingston, Jamaica"
    },
    "Bologna": {
        "cityMap": {"BLQ": "/m/096g3"},
        "type": 3,
        "infoLists": ["BLQ"],
        "text": "/m/096g3",
        "code": null,
        "desc": "Bologna, Italy"
    },
    "Madrid": {
        "cityMap": {"MAD": "/m/056_y"},
        "type": 3,
        "infoLists": ["MAD"],
        "text": "/m/056_y",
        "code": null,
        "desc": "Madrid, Spain"
    },
    "Vientiane": {
        "cityMap": {"VTE": "/m/0ftp8"},
        "type": 3,
        "infoLists": ["VTE"],
        "text": "/m/0ftp8",
        "code": null,
        "desc": "Vientiane, Laos"
    },
    "Chengdu": {
        "cityMap": {"CTU": "/m/016v46", "TFU": "/m/016v46"},
        "type": 3,
        "infoLists": ["CTU", "TFU"],
        "text": "/m/016v46",
        "code": null,
        "desc": "Chengdu, China"
    },
    "Philadelphia": {
        "cityMap": {"PHL": "/m/0dclg"},
        "type": 3,
        "infoLists": ["PHL"],
        "text": "/m/0dclg",
        "code": null,
        "desc": "Philadelphia, Pennsylvania, USA"
    },
    "Oakland": {
        "cityMap": {"OAK": "/m/0dc95", "SFO": "/m/0d6lp"},
        "type": 3,
        "infoLists": ["OAK", "SFO"],
        "text": "/m/0dc95",
        "code": null,
        "desc": "Oakland, California, USA"
    },
    "Ko Samui": {
        "cityMap": {"USM": "/m/033csv"},
        "type": 3,
        "infoLists": ["USM"],
        "text": "/m/033csv",
        "code": null,
        "desc": "Ko Samui, Thailand"
    },
    "Fort Myers": {
        "cityMap": {"RSW": "/m/0rmby"},
        "type": 3,
        "infoLists": ["RSW"],
        "text": "/m/0rmby",
        "code": null,
        "desc": "Fort Myers, Florida, USA"
    },
    "Sibu": {
        "cityMap": {"SBW": "/m/03x61c"},
        "type": 3,
        "infoLists": ["SBW"],
        "text": "/m/03x61c",
        "code": null,
        "desc": "Sibu, Malaysia"
    },
    "Pittsburgh": {
        "cityMap": {"PIT": "/m/068p2"},
        "type": 3,
        "infoLists": ["PIT"],
        "text": "/m/068p2",
        "code": null,
        "desc": "Pittsburgh, Pennsylvania, USA"
    },
    "Edinburgh": {
        "cityMap": {"EDI": "/m/02m77"},
        "type": 3,
        "infoLists": ["EDI"],
        "text": "/m/02m77",
        "code": null,
        "desc": "Edinburgh, United Kingdom"
    },
    "Beirut": {
        "cityMap": {"BEY": "/m/09bjv"},
        "type": 3,
        "infoLists": ["BEY"],
        "text": "/m/09bjv",
        "code": null,
        "desc": "Beirut, Lebanon"
    },
    "Tel Aviv-Yafo": {
        "cityMap": {"TLV": "/m/07qzv"},
        "type": 3,
        "infoLists": ["TLV"],
        "text": "/m/07qzv",
        "code": null,
        "desc": "Tel Aviv-Yafo, Israel"
    },
    "Islamabad": {
        "cityMap": {"ISB": "/m/0dhd5"},
        "type": 3,
        "infoLists": ["ISB"],
        "text": "/m/0dhd5",
        "code": null,
        "desc": "Islamabad, Pakistan"
    },
    "Hiroshima": {
        "cityMap": {"HIJ": "/m/0g3cw"},
        "type": 3,
        "infoLists": ["HIJ"],
        "text": "/m/0g3cw",
        "code": null,
        "desc": "Hiroshima, Japan"
    },
    "Santa Ana": {
        "cityMap": {"LAX": "/m/030qb3t", "SNA": "/m/0jbrr"},
        "type": 3,
        "infoLists": ["LAX", "SNA"],
        "text": "/m/0jbrr",
        "code": null,
        "desc": "Santa Ana, California, USA"
    },
    "Nice": {
        "cityMap": {"NCE": "/m/0cp6w"},
        "type": 3,
        "infoLists": ["NCE"],
        "text": "/m/0cp6w",
        "code": null,
        "desc": "Nice, France"
    },
    "Burbank": {
        "cityMap": {"LAX": "/m/030qb3t", "BUR": "/m/0r00l"},
        "type": 3,
        "infoLists": ["LAX", "BUR"],
        "text": "/m/0r00l",
        "code": null,
        "desc": "Burbank, California, USA"
    },
    "Tuguegarao": {
        "cityMap": {"MNL": "/m/0195pd", "TUG": "/m/04zdyk"},
        "type": 3,
        "infoLists": ["MNL", "TUG"],
        "text": "/m/04zdyk",
        "code": null,
        "desc": "Tuguegarao City, Philippines"
    },
    "Charlottetown": {
        "cityMap": {"YYG": "/m/0fnx1"},
        "type": 3,
        "infoLists": ["YYG"],
        "text": "/m/0fnx1",
        "code": null,
        "desc": "Charlottetown, Prince Edward Island, Canada"
    },
    "Coimbatore": {
        "cityMap": {"CJB": "/m/019fc4"},
        "type": 3,
        "infoLists": ["CJB"],
        "text": "/m/019fc4",
        "code": null,
        "desc": "Coimbatore, Tamil Nadu, India"
    },
    "Angeles/Mabalacat": {"type": 1, "code": "CRK"},
    "Kansas City": {
        "cityMap": {"MCI": "/m/04f_d"},
        "type": 3,
        "infoLists": ["MCI"],
        "text": "/m/04f_d",
        "code": null,
        "desc": "Kansas City, Missouri, USA"
    },
    "Dubai": {
        "cityMap": {"DXB": "/m/01f08r", "SHJ": "/m/03w9gtf", "AUH": "/m/0gxj", "DWC": "/m/01f08r"},
        "type": 3,
        "infoLists": ["DXB", "SHJ", "AUH", "DWC"],
        "text": "/m/01f08r",
        "code": null,
        "desc": "Dubai - United Arab Emirates"
    },
    "Srinagar": {
        "cityMap": {"SXR": "/m/01q_22"},
        "type": 3,
        "infoLists": ["SXR"],
        "text": "/m/01q_22",
        "code": null,
        "desc": "Srinagar"
    },
    "Huatulco": {
        "cityMap": {"HUX": "/g/1jkx8qq01"},
        "type": 3,
        "infoLists": ["HUX"],
        "text": "/m/05p94_",
        "code": null,
        "desc": "Huatulco"
    },
    "Ibiza": {
        "cityMap": {"IBZ": "/m/021n7_"},
        "type": 3,
        "infoLists": ["IBZ"],
        "text": "/m/0h2c3",
        "code": null,
        "desc": "Ibiza, Spain"
    },
    "Pune": {
        "cityMap": {"PNQ": "/m/015y2q"},
        "type": 3,
        "infoLists": ["PNQ"],
        "text": "/m/015y2q",
        "code": null,
        "desc": "Pune, Maharashtra, India"
    },
    "Leon/Guanajuato": {"type": 1, "code": "BJX"},
    "Cheongju": {
        "cityMap": {"CJJ": "/m/022tg1", "ICN": "/m/0hsqf"},
        "type": 3,
        "infoLists": ["CJJ", "ICN"],
        "text": "/m/022tg1",
        "code": null,
        "desc": "Cheongju-si, South Korea"
    },
    "Lucknow": {
        "cityMap": {"LKO": "/m/022tq4"},
        "type": 3,
        "infoLists": ["LKO"],
        "text": "/m/022tq4",
        "code": null,
        "desc": "Lucknow, Uttar Pradesh, India"
    },
    "Kaohsiung": {
        "cityMap": {"KHH": "/m/04bnx"},
        "type": 3,
        "infoLists": ["KHH"],
        "text": "/m/04bnx",
        "code": null,
        "desc": "Kaohsiung City, Taiwan"
    },
    "Liberia": {
        "cityMap": {"LIR": "/m/03cpv3"},
        "type": 3,
        "infoLists": ["LIR"],
        "text": "/m/03cpv3",
        "code": null,
        "desc": "Liberia, Costa Rica"
    },
    "Kagoshima": {
        "cityMap": {"KOJ": "/m/049wm"},
        "type": 3,
        "infoLists": ["KOJ"],
        "text": "/m/049wm",
        "code": null,
        "desc": "Kagoshima, Japan"
    },
    "Matsumoto": {
        "cityMap": {"MMJ": "/m/012xgc", "NGO": "/m/0gqfy"},
        "type": 3,
        "infoLists": ["MMJ", "NGO"],
        "text": "/m/012xgc",
        "code": null,
        "desc": "Matsumoto, Japan"
    },
    "Ningbo": {
        "cityMap": {"NGB": "/m/01l33l"},
        "type": 3,
        "infoLists": ["NGB"],
        "text": "/m/01l33l",
        "code": null,
        "desc": "Ningbo, China"
    },
    "Warsaw": {
        "cityMap": {"WAW": "/m/081m_", "WMI": "/m/022b2m"},
        "type": 3,
        "infoLists": ["WAW", "WMI"],
        "text": "/m/081m_",
        "code": null,
        "desc": "Warsaw, Poland"
    },
    "Charleston": {
        "cityMap": {"CHS": "/m/0gkgp"},
        "type": 3,
        "infoLists": ["CHS"],
        "text": "/m/0gkgp",
        "code": null,
        "desc": "Charleston, South Carolina, USA"
    },
    "Belgrade": {
        "cityMap": {"BEG": "/m/0fhzf"},
        "type": 3,
        "infoLists": ["BEG"],
        "text": "/m/0fhzf",
        "code": null,
        "desc": "Belgrade, Serbia"
    },
    "Xiamen": {
        "cityMap": {"XMN": "/m/0126c3"},
        "type": 3,
        "infoLists": ["XMN"],
        "text": "/m/0126c3",
        "code": null,
        "desc": "Xiamen, China"
    },
    "Udaipur": {
        "cityMap": {"UDR": "/m/0b_kfy"},
        "type": 3,
        "infoLists": ["UDR"],
        "text": "/m/0b_kfy",
        "code": null,
        "desc": "Udaipur, Rajasthan, India"
    },
    "Buenos Aires": {
        "cityMap": {"AEP": "/m/01ly5m", "EZE": "/m/01ly5m"},
        "type": 3,
        "infoLists": ["AEP", "EZE"],
        "text": "/m/01ly5m",
        "code": null,
        "desc": "Buenos Aires, Argentina"
    },
    "Billings": {
        "cityMap": {"BIL": "/m/0x44q"},
        "type": 3,
        "infoLists": ["BIL"],
        "text": "/m/0x44q",
        "code": null,
        "desc": "Billings, Montana, USA"
    },
    "Cartagena": {
        "cityMap": {"CTG": "/m/0h45n"},
        "type": 3,
        "infoLists": ["CTG"],
        "text": "/m/0h45n",
        "code": null,
        "desc": "Cartagena, Colombia"
    },
    "Aruba": {
        "cityMap": {"AUA": "/m/0j11"},
        "type": 3,
        "infoLists": ["AUA"],
        "text": "/m/0j11",
        "code": null,
        "desc": "Aruba"
    },
    "Guiyang": {
        "cityMap": {"KWE": "/m/01zxg8"},
        "type": 3,
        "infoLists": ["KWE"],
        "text": "/m/01zxg8",
        "code": null,
        "desc": "Guiyang, China"
    },
    "Salt Lake City": {
        "cityMap": {"SLC": "/m/0f2r6"},
        "type": 3,
        "infoLists": ["SLC"],
        "text": "/m/0f2r6",
        "code": null,
        "desc": "Salt Lake City, Utah, USA"
    },
    "Leh": {
        "cityMap": {"IXL": "/m/02bnpk"},
        "type": 3,
        "infoLists": ["IXL"],
        "text": "/m/02bnpk",
        "code": null,
        "desc": "Leh"
    },
    "Chongqing": {
        "cityMap": {"CKG": "/m/017236"},
        "type": 3,
        "infoLists": ["CKG"],
        "text": "/m/017236",
        "code": null,
        "desc": "Chongqing, China"
    },
    "Tashkent": {
        "cityMap": {"TAS": "/m/0fsmy"},
        "type": 3,
        "infoLists": ["TAS"],
        "text": "/m/0fsmy",
        "code": null,
        "desc": "Tashkent, Uzbekistan"
    },
    "Pisa": {
        "cityMap": {"PSA": "/m/064xp"},
        "type": 3,
        "infoLists": ["PSA"],
        "text": "/m/064xp",
        "code": null,
        "desc": "Pisa, Italy"
    },
    "Alghero": {
        "cityMap": {"AHO": "/m/0ccn5"},
        "type": 3,
        "infoLists": ["AHO"],
        "text": "/m/0ccn5",
        "code": null,
        "desc": "Alghero, Italy"
    },
    "Vishakhapatnam": {
        "cityMap": {"VTZ": "/m/01jmpf"},
        "type": 3,
        "infoLists": ["VTZ"],
        "text": "/m/01jmpf",
        "code": null,
        "desc": "Visakhapatnam, Andhra Pradesh, India"
    },
    "Ranchi": {
        "cityMap": {"IXR": "/m/01ttt6"},
        "type": 3,
        "infoLists": ["IXR"],
        "text": "/m/01ttt6",
        "code": null,
        "desc": "Ranchi, Jharkhand, India"
    },
    "Kuching": {
        "cityMap": {"KCH": "/m/013_9z"},
        "type": 3,
        "infoLists": ["KCH"],
        "text": "/m/013_9z",
        "code": null,
        "desc": "Kuching, Malaysia"
    },
    "New Ishigaki": {"cityMap": {}, "type": 1, "text": "/m/0s8xkzr", "code": "ISG", "desc": "New Ishigaki Airport"},
    "Phnom Penh": {
        "cityMap": {"PNH": "/m/0dlwj"},
        "type": 3,
        "infoLists": ["PNH"],
        "text": "/m/0dlwj",
        "code": null,
        "desc": "Phnom Penh, Cambodia"
    },
    "Budapest": {
        "cityMap": {"BUD": "/m/095w_"},
        "type": 3,
        "infoLists": ["BUD"],
        "text": "/m/095w_",
        "code": null,
        "desc": "Budapest, Hungary"
    },
    "Faro": {
        "cityMap": {"FAO": "/m/029v4j"},
        "type": 3,
        "infoLists": ["FAO"],
        "text": "/m/01gg84",
        "code": null,
        "desc": "Faro District, Portugal"
    },
    "El Paso": {
        "cityMap": {"ELP": "/m/0100mt"},
        "type": 3,
        "infoLists": ["ELP"],
        "text": "/m/0100mt",
        "code": null,
        "desc": "El Paso, Texas, USA"
    },
    "Macau": {
        "cityMap": {"MFM": "/m/04thp"},
        "type": 3,
        "infoLists": ["MFM"],
        "text": "/m/04thp",
        "code": null,
        "desc": "Macao"
    },
    "Raleigh/Durham": {
        "cityMap": {},
        "type": 1,
        "text": "/m/01nhvq",
        "code": "RDU",
        "desc": "Raleigh-Durham International Airport"
    },
    "Jamnagar": {
        "cityMap": {"AMD": "/m/01d88c", "JGA": "/m/04_5y_"},
        "type": 3,
        "infoLists": ["AMD", "JGA"],
        "text": "/m/04_5y_",
        "code": null,
        "desc": "Jamnagar, Gujarat, India"
    },
    "Funchal": {
        "cityMap": {"FNC": "/m/04_z1"},
        "type": 3,
        "infoLists": ["FNC"],
        "text": "/m/0199ll",
        "code": null,
        "desc": "Funchal, Portugal"
    },
    "Bucharest": {
        "cityMap": {"OTP": "/m/096gm", "BBU": "/m/096gm"},
        "type": 3,
        "infoLists": ["OTP", "BBU"],
        "text": "/m/096gm",
        "code": null,
        "desc": "Bucharest, Romania"
    },
    "Reno": {
        "cityMap": {"RNO": "/m/06kx2"},
        "type": 3,
        "infoLists": ["RNO"],
        "text": "/m/06kx2",
        "code": null,
        "desc": "Reno, Nevada, USA"
    },
    "Albany": {
        "cityMap": {"ALB": "/m/0dq16"},
        "type": 3,
        "infoLists": ["ALB"],
        "text": "/m/0dq16",
        "code": null,
        "desc": "Albany, New York, USA"
    },
    "Algiers": {
        "cityMap": {"ALG": "/m/0rtv"},
        "type": 3,
        "infoLists": ["ALG"],
        "text": "/m/0rtv",
        "code": null,
        "desc": "Algiers, Algeria"
    },
    "Oaxaca": {
        "cityMap": {"OAX": "/m/01bl0v"},
        "type": 3,
        "infoLists": ["OAX"],
        "text": "/m/01bl0v",
        "code": null,
        "desc": "Oaxaca, Mexico"
    },
    "Genoa": {
        "cityMap": {"GOA": "/m/0hknf", "MXP": "/m/0947l"},
        "type": 3,
        "infoLists": ["GOA", "MXP"],
        "text": "/m/0hknf",
        "code": null,
        "desc": "Genoa, Italy"
    },
    "Vienna": {
        "cityMap": {"VIE": "/m/0fhp9"},
        "type": 3,
        "infoLists": ["VIE"],
        "text": "/m/0fhp9",
        "code": null,
        "desc": "Vienna, Austria"
    },
    "Darbhanga": {
        "cityMap": {"DBR": "/m/04hc16", "PAT": "/m/027wvb"},
        "type": 3,
        "infoLists": ["DBR", "PAT"],
        "text": "/m/04hc16",
        "code": null,
        "desc": "Darbhanga, Bihar, India"
    },
    "Nagpur": {
        "cityMap": {"NAG": "/m/02c98m"},
        "type": 3,
        "infoLists": ["NAG"],
        "text": "/m/02c98m",
        "code": null,
        "desc": "Nagpur, Maharashtra, India"
    },
    "Krabi": {
        "cityMap": {"KBV": "/m/01g9mf"},
        "type": 3,
        "infoLists": ["KBV"],
        "text": "/m/01g9mf",
        "code": null,
        "desc": "Krabi, Thailand"
    },
    "Mangalore": {
        "cityMap": {"IXE": "/m/01sv6k"},
        "type": 3,
        "infoLists": ["IXE"],
        "text": "/m/01sv6k",
        "code": null,
        "desc": "Mangaluru, Karnataka, India"
    },
    "Kathmandu": {
        "cityMap": {"KTM": "/m/04cx5"},
        "type": 3,
        "infoLists": ["KTM"],
        "text": "/m/04cx5",
        "code": null,
        "desc": "Kathmandu, Nepal"
    },
    "Johor Bahru": {
        "cityMap": {"JHB": "/m/0207sh"},
        "type": 3,
        "infoLists": ["JHB"],
        "text": "/m/0207sh",
        "code": null,
        "desc": "Johor Bahru, Malaysia"
    },
    "Rio de Janeiro": {
        "cityMap": {"SDU": "/m/06gmr", "GIG": "/m/06gmr"},
        "type": 3,
        "infoLists": ["SDU", "GIG"],
        "text": "/m/06gmr",
        "code": null,
        "desc": "Rio de Janeiro, Brazil"
    },
    "Whitehorse": {
        "cityMap": {"YXY": "/m/081s7"},
        "type": 3,
        "infoLists": ["YXY"],
        "text": "/m/081s7",
        "code": null,
        "desc": "Whitehorse, Yukon, Canada"
    },
    "Amami": {
        "cityMap": {"ASJ": "/m/0cx694"},
        "type": 3,
        "infoLists": ["ASJ"],
        "text": "/m/03vp1b",
        "code": null,
        "desc": "Amami Ōshima, Japan"
    },
    "Reynosa": {
        "cityMap": {"REX": "/m/01gm_j", "MTY": "/m/0b2h3"},
        "type": 3,
        "infoLists": ["REX", "MTY"],
        "text": "/m/01gm_j",
        "code": null,
        "desc": "Reynosa, Mexico"
    },
    "Kochi": {
        "cityMap": {"KCZ": "/m/01wpmx"},
        "type": 3,
        "infoLists": ["KCZ"],
        "text": "/m/01wpmx",
        "code": null,
        "desc": "Kochi, Japan"
    },
    "Daraga": {
        "cityMap": {"DRP": "/m/06jjl0"},
        "type": 3,
        "infoLists": ["DRP"],
        "text": "/m/06jjl0",
        "code": null,
        "desc": "Daraga, Philippines"
    },
    "Merida": {
        "cityMap": {"MID": "/m/0hyqj"},
        "type": 3,
        "infoLists": ["MID"],
        "text": "/m/0hyqj",
        "code": null,
        "desc": "Merida, Mexico"
    },
    "Haikou": {
        "cityMap": {"HAK": "/m/02fwq0"},
        "type": 3,
        "infoLists": ["HAK"],
        "text": "/m/02fwq0",
        "code": null,
        "desc": "Haikou, China"
    },
    "Durango": {
        "cityMap": {"DGO": "/m/01gn55"},
        "type": 3,
        "infoLists": ["DGO"],
        "text": "/m/01gn55",
        "code": null,
        "desc": "Durango, Mexico"
    },
    "Urumqi": {
        "cityMap": {"URC": "/m/01c8t6"},
        "type": 3,
        "infoLists": ["URC"],
        "text": "/m/01c8t6",
        "code": null,
        "desc": "Ürümqi, China"
    },
    "Morelia": {
        "cityMap": {"MLM": "/m/01btsy", "MEX": "/m/04sqj", "GDL": "/m/0jp26"},
        "type": 3,
        "infoLists": ["MLM", "MEX", "GDL"],
        "text": "/m/01btsy",
        "code": null,
        "desc": "Morelia, Mexico"
    },
    "Arequipa": {
        "cityMap": {"AQP": "/m/01py87"},
        "type": 3,
        "infoLists": ["AQP"],
        "text": "/m/01py87",
        "code": null,
        "desc": "Arequipa, Peru"
    },
    "Hobart": {
        "cityMap": {"HBA": "/m/03kjh"},
        "type": 3,
        "infoLists": ["HBA"],
        "text": "/m/025rps2",
        "code": null,
        "desc": "Hobart, Australia"
    },
    "Shantou": {
        "cityMap": {"SWA": "/m/01nm6k"},
        "type": 3,
        "infoLists": ["SWA"],
        "text": "/m/01nm6k",
        "code": null,
        "desc": "Shantou, China"
    },
    "Wenzhou": {
        "cityMap": {"WNZ": "/m/02fq6p"},
        "type": 3,
        "infoLists": ["WNZ"],
        "text": "/m/02fq6p",
        "code": null,
        "desc": "Wenzhou, China"
    },
    "Fort St John": {
        "cityMap": {"YXJ": "/m/02hw16"},
        "type": 3,
        "infoLists": ["YXJ"],
        "text": "/m/02hw16",
        "code": null,
        "desc": "Fort St. John, British Columbia, Canada"
    },
    "Jammu": {
        "cityMap": {"IXJ": "/m/051zvy9"},
        "type": 3,
        "infoLists": ["IXJ"],
        "text": "/m/051zvy9",
        "code": null,
        "desc": "Jammu"
    },
    "Obihiro": {
        "cityMap": {"OBO": "/m/01wfgj", "CTS": "/m/0gp5l6"},
        "type": 3,
        "infoLists": ["OBO", "CTS"],
        "text": "/m/01wfgj",
        "code": null,
        "desc": "Obihiro, Japan"
    },
    "Missoula": {
        "cityMap": {"MSO": "/m/0x335"},
        "type": 3,
        "infoLists": ["MSO"],
        "text": "/m/0x335",
        "code": null,
        "desc": "Missoula, Montana, USA"
    },
    "Komatsu": {
        "cityMap": {"KMQ": "/m/01wjwg"},
        "type": 3,
        "infoLists": ["KMQ"],
        "text": "/m/01wjwg",
        "code": null,
        "desc": "Komatsu, Japan"
    },
    "Kushiro": {
        "cityMap": {"KUH": "/m/01wfgy"},
        "type": 3,
        "infoLists": ["KUH"],
        "text": "/m/01wfgy",
        "code": null,
        "desc": "Kushiro, Japan"
    },
    "Gold Coast": {
        "cityMap": {"OOL": "/m/0g4g7"},
        "type": 3,
        "infoLists": ["OOL"],
        "text": "/m/0g4g7",
        "code": null,
        "desc": "Gold Coast, Australia"
    },
    "Kuantan": {
        "cityMap": {"KUA": "/m/03721b", "KUL": "/m/049d1"},
        "type": 3,
        "infoLists": ["KUA", "KUL"],
        "text": "/m/03721b",
        "code": null,
        "desc": "Kuantan, Malaysia"
    },
    "Quinhon": {
        "cityMap": {"UIH": "/m/06jywd"},
        "type": 3,
        "infoLists": ["UIH"],
        "text": "/m/06jywd",
        "code": null,
        "desc": "Quy Nhon, Vietnam"
    },
    "Dubrovnik": {
        "cityMap": {"DBV": "/m/0fbwq"},
        "type": 3,
        "infoLists": ["DBV"],
        "text": "/m/0fbwq",
        "code": null,
        "desc": "Dubrovnik, Croatia"
    },
    "Split": {
        "cityMap": {"SPU": "/m/01g_k3"},
        "type": 3,
        "infoLists": ["SPU"],
        "text": "/m/01g_k3",
        "code": null,
        "desc": "Split, Croatia"
    },
    "Baku": {
        "cityMap": {"GYD": "/m/01gf5"},
        "type": 3,
        "infoLists": ["GYD"],
        "text": "/m/01gf5",
        "code": null,
        "desc": "Baku, Azerbaijan"
    },
    "Catania": {
        "cityMap": {"CTA": "/m/0c630"},
        "type": 3,
        "infoLists": ["CTA"],
        "text": "/m/0c630",
        "code": null,
        "desc": "Catania, Italy"
    },
    "Luanda": {
        "cityMap": {"LAD": "/m/04nsy"},
        "type": 3,
        "infoLists": ["LAD"],
        "text": "/m/04nsy",
        "code": null,
        "desc": "Luanda, Angola"
    },
    "Colombo": {
        "cityMap": {"CMB": "/m/0fn7r"},
        "type": 3,
        "infoLists": ["CMB"],
        "text": "/m/0fn7r",
        "code": null,
        "desc": "Colombo, Sri Lanka"
    },
    "Aomori": {
        "cityMap": {"AOJ": "/m/0gqhy"},
        "type": 3,
        "infoLists": ["AOJ"],
        "text": "/m/0gqhy",
        "code": null,
        "desc": "Aomori, Japan"
    },
    "El Nido": {
        "cityMap": {"PPS": "/m/06s5d4", "ENI": "/m/02hv5k"},
        "type": 3,
        "infoLists": ["PPS", "ENI"],
        "text": "/m/02hv5k",
        "code": null,
        "desc": "El Nido, Philippines"
    },
    "New Orleans": {
        "cityMap": {"MSY": "/m/0f2tj"},
        "type": 3,
        "infoLists": ["MSY"],
        "text": "/m/0f2tj",
        "code": null,
        "desc": "New Orleans, Louisiana, USA"
    },
    "Mulu": {
        "cityMap": {"MZV": "/m/05sxq6"},
        "type": 3,
        "infoLists": ["MZV"],
        "text": "/m/05sxq6",
        "code": null,
        "desc": "Gunung Mulu National Park, Malaysia"
    },
    "Shizuoka": {
        "cityMap": {"FSZ": "/m/0gp5nf", "HND": "/m/07dfk"},
        "type": 3,
        "infoLists": ["FSZ", "HND"],
        "text": "/m/0gp5nf",
        "code": null,
        "desc": "Shizuoka, Japan"
    },
    "Buffalo": {
        "cityMap": {"BUF": "/m/019fh"},
        "type": 3,
        "infoLists": ["BUF"],
        "text": "/m/019fh",
        "code": null,
        "desc": "Buffalo, New York, USA"
    },
    "Uyuni": {
        "cityMap": {"UYU": "/m/06rc1w"},
        "type": 3,
        "infoLists": ["UYU"],
        "text": "/m/01cbcv",
        "code": null,
        "desc": "Uyuni Salt Flat, Bolivia"
    },
    "Qingdao": {
        "cityMap": {"TAO": "/m/01l3s0"},
        "type": 3,
        "infoLists": ["TAO"],
        "text": "/m/01l3s0",
        "code": null,
        "desc": "Qingdao, China"
    },
    "Kanpur": {
        "cityMap": {"LKO": "/m/022tq4", "KNU": "/m/01_q7h"},
        "type": 3,
        "infoLists": ["LKO", "KNU"],
        "text": "/m/01_q7h",
        "code": null,
        "desc": "Kanpur, Uttar Pradesh, India"
    },
    "Memphis": {
        "cityMap": {"MEM": "/m/0c_m3"},
        "type": 3,
        "infoLists": ["MEM"],
        "text": "/m/0c_m3",
        "code": null,
        "desc": "Memphis, Tennessee, USA"
    },
    "Cologne/Bonn": {"cityMap": {}, "type": 1, "text": "/m/043wty", "code": "CGN", "desc": "Cologne Bonn Airport"},
    "Copenhagen": {
        "cityMap": {"CPH": "/m/01lfy"},
        "type": 3,
        "infoLists": ["CPH"],
        "text": "/m/01lfy",
        "code": null,
        "desc": "Copenhagen, Denmark"
    },
    "Oslo": {
        "cityMap": {"OSL": "/m/05l64", "TRF": "/m/05l64"},
        "type": 3,
        "infoLists": ["OSL", "TRF"],
        "text": "/m/05l64",
        "code": null,
        "desc": "Oslo, Norway"
    },
    "Sunshine Coast": {
        "cityMap": {"BNE": "/m/01b8jj", "MCY": "/m/02wwzqc"},
        "type": 3,
        "infoLists": ["BNE", "MCY"],
        "text": "/m/02vmlw",
        "code": null,
        "desc": "Sunshine Coast, Australia"
    },
    "Kayseri": {
        "cityMap": {"ASR": "/m/01k571"},
        "type": 3,
        "infoLists": ["ASR"],
        "text": "/m/01k571",
        "code": null,
        "desc": "Kayseri, Türkiye"
    },
    "Dar es Salaam": {
        "cityMap": {"DAR": "/m/02cdt"},
        "type": 3,
        "infoLists": ["DAR"],
        "text": "/m/02cdt",
        "code": null,
        "desc": "Dar es Salaam, Tanzania"
    },
    "Ube": {"cityMap": {}, "type": 1, "text": "/m/02pm1k2", "code": "UBJ", "desc": "Yamaguchi Ube Airport"},
    "Cali": {
        "cityMap": {"LAX": "/m/030qb3t", "BUR": "/m/0r00l"},
        "type": 3,
        "infoLists": ["LAX", "BUR"],
        "text": "/m/030qb3t",
        "code": null,
        "desc": "Los Angeles, California, USA"
    },
    "Moscow": {
        "cityMap": {"SVO": "/m/04swd", "DME": "/m/04swd", "VKO": "/m/04swd", "ZIA": "/m/06cyvr"},
        "type": 3,
        "infoLists": ["SVO", "DME", "VKO", "ZIA"],
        "text": "/m/04swd",
        "code": null,
        "desc": "Moscow, Russia"
    },
    "Santa Marta": {
        "cityMap": {"SMR": "/m/02nslc"},
        "type": 3,
        "infoLists": ["SMR"],
        "text": "/m/02nslc",
        "code": null,
        "desc": "Santa Marta, Colombia"
    },
    "Kumamoto": {
        "cityMap": {"KMJ": "/m/0gp6_0"},
        "type": 3,
        "infoLists": ["KMJ"],
        "text": "/m/0gp6_0",
        "code": null,
        "desc": "Kumamoto, Japan"
    },
    "Harbin": {
        "cityMap": {"HRB": "/m/0123gq"},
        "type": 3,
        "infoLists": ["HRB"],
        "text": "/m/0123gq",
        "code": null,
        "desc": "Harbin, China"
    },
    "Tirupati": {
        "cityMap": {"TIR": "/m/089lrc", "MAA": "/m/0c8tk"},
        "type": 3,
        "infoLists": ["TIR", "MAA"],
        "text": "/m/089lrc",
        "code": null,
        "desc": "Tirupati, Andhra Pradesh, India"
    },
    "Birmingham": {
        "cityMap": {"BHX": "/m/0k33p"},
        "type": 3,
        "infoLists": ["BHX"],
        "text": "/m/0k33p",
        "code": null,
        "desc": "Birmingham, United Kingdom"
    },
    "Roi Et": {
        "cityMap": {"KKC": "/m/01cygw", "ROI": "/m/01rpfk"},
        "type": 3,
        "infoLists": ["KKC", "ROI"],
        "text": "/m/01rpfk",
        "code": null,
        "desc": "Roi Et, Thailand"
    },
    "Cairns": {
        "cityMap": {"CNS": "/m/01sgmd"},
        "type": 3,
        "infoLists": ["CNS"],
        "text": "/m/01sgmd",
        "code": null,
        "desc": "Cairns, Australia"
    },
    "Ballina": {
        "cityMap": {"BNK": "/m/02wnj_"},
        "type": 3,
        "infoLists": ["BNK"],
        "text": "/m/02wnj_",
        "code": null,
        "desc": "Ballina, Australia"
    },
    "Dammam": {
        "cityMap": {"DMM": "/m/02fgvz"},
        "type": 3,
        "infoLists": ["DMM"],
        "text": "/m/02fgvz",
        "code": null,
        "desc": "Dammam Saudi Arabia"
    },
    "Ulaanbaatar": {
        "cityMap": {"UBN": "/m/0hqkg"},
        "type": 3,
        "infoLists": ["UBN"],
        "text": "/m/0hqkg",
        "code": null,
        "desc": "Ulaanbaatar, Mongolia"
    },
    "Surat": {
        "cityMap": {"STV": "/m/01h1hn", "BOM": "/m/04vmp"},
        "type": 3,
        "infoLists": ["STV", "BOM"],
        "text": "/m/01h1hn",
        "code": null,
        "desc": "Surat, Gujarat, India"
    },
    "Canberra": {
        "cityMap": {"CBR": "/m/0dp90"},
        "type": 3,
        "infoLists": ["CBR"],
        "text": "/m/0dp90",
        "code": null,
        "desc": "Canberra, Australia"
    },
    "Davao": {
        "cityMap": {"DVO": "/m/02gn1x"},
        "type": 3,
        "infoLists": ["DVO"],
        "text": "/m/02gn1x",
        "code": null,
        "desc": "Davao City, Philippines"
    },
    "Sandakan": {
        "cityMap": {"SDK": "/m/05rw4j"},
        "type": 3,
        "infoLists": ["SDK"],
        "text": "/m/05rw4j",
        "code": null,
        "desc": "Sandakan, Malaysia"
    },
    "Boise": {
        "cityMap": {"BOI": "/m/099ty"},
        "type": 3,
        "infoLists": ["BOI"],
        "text": "/m/099ty",
        "code": null,
        "desc": "Boise, Idaho, USA"
    },
    "Amritsar": {
        "cityMap": {"ATQ": "/m/029kpy"},
        "type": 3,
        "infoLists": ["ATQ"],
        "text": "/m/029kpy",
        "code": null,
        "desc": "Amritsar, Punjab, India"
    },
    "Stockholm": {
        "cityMap": {"ARN": "/m/06mxs", "NYO": "/m/06mxs"},
        "type": 3,
        "infoLists": ["ARN", "NYO"],
        "text": "/m/06mxs",
        "code": null,
        "desc": "Stockholm, Sweden"
    },
    "Nagasaki": {
        "cityMap": {"NGS": "/m/05gqf"},
        "type": 3,
        "infoLists": ["NGS"],
        "text": "/m/05gqf",
        "code": null,
        "desc": "Nagasaki, Japan"
    },
    "Eugene": {
        "cityMap": {"EUG": "/m/02mf7"},
        "type": 3,
        "infoLists": ["EUG"],
        "text": "/m/02mf7",
        "code": null,
        "desc": "Eugene, Oregon, USA"
    },
    "Niigata": {
        "cityMap": {"KIJ": "/m/0gp6bn"},
        "type": 3,
        "infoLists": ["KIJ"],
        "text": "/m/0gp6bn",
        "code": null,
        "desc": "Niigata, Japan"
    },
    "Spokane": {
        "cityMap": {"GEG": "/m/010v8k"},
        "type": 3,
        "infoLists": ["GEG"],
        "text": "/m/010v8k",
        "code": null,
        "desc": "Spokane, Washington, USA"
    },
    "Cordoba": {
        "cityMap": {"COR": "/m/01k03r"},
        "type": 3,
        "infoLists": ["COR"],
        "text": "/m/01k03r",
        "code": null,
        "desc": "Córdoba, Argentina"
    },
    "Praya": {
        "cityMap": {"LOP": "/m/080gjw7"},
        "type": 3,
        "infoLists": ["LOP"],
        "text": "/m/080gjw7",
        "code": null,
        "desc": "Praya, Indonesia"
    },
    "Hanamaki": {
        "cityMap": {"HNA": "/m/01wfr4"},
        "type": 3,
        "infoLists": ["HNA"],
        "text": "/m/01wfr4",
        "code": null,
        "desc": "Hanamaki, Japan"
    },
    "Zurich": {
        "cityMap": {"ZRH": "/m/08966"},
        "type": 3,
        "infoLists": ["ZRH"],
        "text": "/m/08966",
        "code": null,
        "desc": "Zürich, Switzerland"
    },
    "Port Blair": {
        "cityMap": {"IXZ": "/m/04v6qd"},
        "type": 3,
        "infoLists": ["IXZ"],
        "text": "/g/11pz1bf7lx",
        "code": null,
        "desc": "Port Blair, Andaman and Nicobar Islands, India"
    },
    "Prague": {
        "cityMap": {"PRG": "/m/05ywg"},
        "type": 3,
        "infoLists": ["PRG"],
        "text": "/m/05ywg",
        "code": null,
        "desc": "Prague, Czechia"
    },
    "Tacloban": {
        "cityMap": {"TAC": "/m/037wbd"},
        "type": 3,
        "infoLists": ["TAC"],
        "text": "/m/037wbd",
        "code": null,
        "desc": "Tacloban City, Philippines"
    },
    "Queenstown": {
        "cityMap": {"ZQN": "/m/017cf7"},
        "type": 3,
        "infoLists": ["ZQN"],
        "text": "/m/017cf7",
        "code": null,
        "desc": "Queenstown, New Zealand"
    },
    "Larnaca": {
        "cityMap": {"LCA": "/m/01q7yl"},
        "type": 3,
        "infoLists": ["LCA"],
        "text": "/m/01q7yl",
        "code": null,
        "desc": "Larnaca, Cyprus"
    },
    "Trujillo": {
        "cityMap": {"TRU": "/m/02f4x6", "LIM": "/m/0lpfh"},
        "type": 3,
        "infoLists": ["TRU", "LIM"],
        "text": "/m/02f4x6",
        "code": null,
        "desc": "Trujillo, Peru"
    },
    "Curacao": {
        "cityMap": {"CUR": "/m/0hbgh"},
        "type": 3,
        "infoLists": ["CUR"],
        "text": "/m/0hbgh",
        "code": null,
        "desc": "Curaçao"
    },
    "Caracas": {
        "cityMap": {"CCS": "/m/0fcyj"},
        "type": 3,
        "infoLists": ["CCS"],
        "text": "/m/0fcyj",
        "code": null,
        "desc": "Caracas, Venezuela"
    },
    "Jacksonville": {
        "cityMap": {"JAX": "/m/0ggh3"},
        "type": 3,
        "infoLists": ["JAX"],
        "text": "/m/0ggh3",
        "code": null,
        "desc": "Jacksonville, Florida, USA"
    },
    "Tucson": {
        "cityMap": {"TUS": "/m/0fr0t", "PHX": "/m/0d35y"},
        "type": 3,
        "infoLists": ["TUS", "PHX"],
        "text": "/m/0fr0t",
        "code": null,
        "desc": "Tucson, Arizona, USA"
    },
    "Palermo": {
        "cityMap": {"PMO": "/m/09pxc"},
        "type": 3,
        "infoLists": ["PMO"],
        "text": "/m/09pxc",
        "code": null,
        "desc": "Palermo, Italy"
    },
    "Key West": {
        "cityMap": {"EYW": "/m/0rp46"},
        "type": 3,
        "infoLists": ["EYW"],
        "text": "/m/0rp46",
        "code": null,
        "desc": "Key West, Florida, USA"
    },
    "Madurai": {
        "cityMap": {"IXM": "/m/019fbp"},
        "type": 3,
        "infoLists": ["IXM"],
        "text": "/m/019fbp",
        "code": null,
        "desc": "Madurai, Tamil Nadu, India"
    },
    "Madinah": {
        "cityMap": {"MED": "/m/094vf"},
        "type": 3,
        "infoLists": ["MED"],
        "text": "/m/094vf",
        "code": null,
        "desc": "Madinah Saudi Arabia"
    },
    "Changsha": {
        "cityMap": {"CSX": "/m/01cw6l"},
        "type": 3,
        "infoLists": ["CSX"],
        "text": "/m/01cw6l",
        "code": null,
        "desc": "Changsha, China"
    },
    "Bristol": {
        "cityMap": {"BRS": "/m/095l0"},
        "type": 3,
        "infoLists": ["BRS"],
        "text": "/m/095l0",
        "code": null,
        "desc": "Bristol, United Kingdom"
    },
    "Ipoh": {
        "cityMap": {"KUL": "/m/049d1", "IPH": "/m/01rv39"},
        "type": 3,
        "infoLists": ["KUL", "IPH"],
        "text": "/m/01rv39",
        "code": null,
        "desc": "Ipoh, Malaysia"
    },
    "Grenada": {
        "cityMap": {"GND": "/m/035yg"},
        "type": 3,
        "infoLists": ["GND"],
        "text": "/m/035yg",
        "code": null,
        "desc": "Grenada"
    },
    "Newman": {
        "cityMap": {"ZNE": "/m/050w8k"},
        "type": 3,
        "infoLists": ["ZNE"],
        "text": "/m/050w8k",
        "code": null,
        "desc": "Newman, Australia"
    },
    "Luxor": {
        "cityMap": {"LXR": "/m/0180b5"},
        "type": 3,
        "infoLists": ["LXR"],
        "text": "/m/0180b5",
        "code": null,
        "desc": "Luxor, Egypt"
    },
    "Bhopal": {
        "cityMap": {"BHO": "/m/0cw51"},
        "type": 3,
        "infoLists": ["BHO"],
        "text": "/m/0cw51",
        "code": null,
        "desc": "Bhopal, Madhya Pradesh, India"
    },
    "Lihue": {
        "cityMap": {"LIH": "/m/0jbsn"},
        "type": 3,
        "infoLists": ["LIH"],
        "text": "/g/121vr9fb",
        "code": null,
        "desc": "Lihue, Hawaii, USA"
    },
    "Grand Cayman": {
        "cityMap": {"GCM": "/m/01p7lq"},
        "type": 3,
        "infoLists": ["GCM"],
        "text": "/m/01p7lq",
        "code": null,
        "desc": "Grand Cayman, Cayman Islands"
    },
    "Fredericton": {
        "cityMap": {"YFC": "/m/02w70"},
        "type": 3,
        "infoLists": ["YFC"],
        "text": "/m/02w70",
        "code": null,
        "desc": "Fredericton, New Brunswick, Canada"
    },
    "Tenerife": {
        "cityMap": {"TFN": "/m/01nqb1", "TFS": "/m/01nqb1"},
        "type": 3,
        "infoLists": ["TFN", "TFS"],
        "text": "/m/01nqb1",
        "code": null,
        "desc": "Tenerife, Spain"
    },
    "Kannur": {
        "cityMap": {"CNN": "/m/074yys"},
        "type": 3,
        "infoLists": ["CNN"],
        "text": "/m/074yys",
        "code": null,
        "desc": "Kannur, Kerala, India"
    },
    "Muscat": {
        "cityMap": {"MCT": "/m/0fqds"},
        "type": 3,
        "infoLists": ["MCT"],
        "text": "/m/0fqds",
        "code": null,
        "desc": "Muscat, Oman"
    },
    "Chișinău": {
        "cityMap": {"RMO": "/m/0fn77"},
        "type": 3,
        "infoLists": ["RMO"],
        "text": "/m/0fn77",
        "code": null,
        "desc": "Chișinău, Moldova"
    },
    "Munich": {
        "cityMap": {"MUC": "/m/02h6_6p"},
        "type": 3,
        "infoLists": ["MUC"],
        "text": "/m/02h6_6p",
        "code": null,
        "desc": "Munich, Germany"
    },
    "Pensacola": {
        "cityMap": {"PNS": "/m/0rkkv"},
        "type": 3,
        "infoLists": ["PNS"],
        "text": "/m/0rkkv",
        "code": null,
        "desc": "Pensacola, Florida, USA"
    },
    "Grande Prairie": {
        "cityMap": {"YQU": "/m/01wp8d"},
        "type": 3,
        "infoLists": ["YQU"],
        "text": "/m/01wp8d",
        "code": null,
        "desc": "Grande Prairie, Alberta, Canada"
    },
    "St Louis": {
        "cityMap": {"STL": "/m/06wxw"},
        "type": 3,
        "infoLists": ["STL"],
        "text": "/m/06wxw",
        "code": null,
        "desc": "St. Louis, Missouri, USA"
    },
    "Dehra Dun": {
        "cityMap": {"DED": "/m/04bz2f", "DEL": "/m/0dlv0"},
        "type": 3,
        "infoLists": ["DED", "DEL"],
        "text": "/m/04bz2f",
        "code": null,
        "desc": "Dehradun, Uttarakhand, India"
    },
    "Kona": {
        "cityMap": {"KOA": "/m/0r_g0"},
        "type": 3,
        "infoLists": ["KOA"],
        "text": "/m/0r_g0",
        "code": null,
        "desc": "Kailua-Kona, Hawaii, USA"
    },
    "Tallinn": {
        "cityMap": {"TLL": "/m/07r_p"},
        "type": 3,
        "infoLists": ["TLL"],
        "text": "/m/07r_p",
        "code": null,
        "desc": "Tallinn, Estonia"
    },
    "Destin/Ft Walton Beach": {"type": 1, "code": "VPS"},
    "Kunming": {
        "cityMap": {"KMG": "/m/01c06d"},
        "type": 3,
        "infoLists": ["KMG"],
        "text": "/m/01c06d",
        "code": null,
        "desc": "Kunming, China"
    },
    "Nantes": {
        "cityMap": {"NTE": "/m/0hqzr"},
        "type": 3,
        "infoLists": ["NTE"],
        "text": "/m/0hqzr",
        "code": null,
        "desc": "Nantes, France"
    },
    "Praia": {
        "cityMap": {"RAI": "/m/0fs39"},
        "type": 3,
        "infoLists": ["RAI"],
        "text": "/m/0fs39",
        "code": null,
        "desc": "Praia, Cape Verde"
    },
    "Abu Dhabi": {
        "cityMap": {"AUH": "/m/0gxj"},
        "type": 3,
        "infoLists": ["AUH"],
        "text": "/m/0gxj",
        "code": null,
        "desc": "Abu Dhabi - United Arab Emirates"
    },
    "Yerevan": {
        "cityMap": {"EVN": "/m/0889d"},
        "type": 3,
        "infoLists": ["EVN"],
        "text": "/m/0889d",
        "code": null,
        "desc": "Yerevan, Armenia"
    },
    "Milos": {
        "cityMap": {"MLO": "/m/025zn2f"},
        "type": 3,
        "infoLists": ["MLO"],
        "text": "/m/018x2c",
        "code": null,
        "desc": "Milos, Greece"
    },
    "Chiclayo": {
        "cityMap": {"LIM": "/m/0lpfh", "CIX": "/m/02pg_2"},
        "type": 3,
        "infoLists": ["LIM", "CIX"],
        "text": "/m/02pg_2",
        "code": null,
        "desc": "Chiclayo, Peru"
    },
    "Yangon": {
        "cityMap": {"RGN": "/m/0fs54"},
        "type": 3,
        "infoLists": ["RGN"],
        "text": "/m/0fs54",
        "code": null,
        "desc": "Yangon, Myanmar (Burma)"
    },
    "Florence": {
        "cityMap": {"FLR": "/m/031y2", "PSA": "/m/064xp"},
        "type": 3,
        "infoLists": ["FLR", "PSA"],
        "text": "/m/031y2",
        "code": null,
        "desc": "Florence, Italy"
    },
    "Bari": {
        "cityMap": {"BRI": "/m/0c66m"},
        "type": 3,
        "infoLists": ["BRI"],
        "text": "/m/0c66m",
        "code": null,
        "desc": "Bari, Italy"
    },
    "Zagreb": {
        "cityMap": {"ZAG": "/m/0fhzy"},
        "type": 3,
        "infoLists": ["ZAG"],
        "text": "/m/0fhzy",
        "code": null,
        "desc": "Zagreb, Croatia"
    },
    "Gorakhpur": {
        "cityMap": {"GOP": "/m/04bqvv"},
        "type": 3,
        "infoLists": ["GOP"],
        "text": "/m/04bqvv",
        "code": null,
        "desc": "Gorakhpur, Uttar Pradesh, India"
    },
    "Tianjin": {
        "cityMap": {"TSN": "/m/0df4y"},
        "type": 3,
        "infoLists": ["TSN"],
        "text": "/m/0df4y",
        "code": null,
        "desc": "Tianjin, China"
    },
    "Yellowknife": {
        "cityMap": {"YZF": "/m/0prfg"},
        "type": 3,
        "infoLists": ["YZF"],
        "text": "/m/0prfg",
        "code": null,
        "desc": "Yellowknife, Northwest Territories, Canada"
    },
    "Crescent City": {
        "cityMap": {"GTP": "/m/0zdkh", "MFR": "/m/0zdfp", "CEC": "/m/0qy_1"},
        "type": 3,
        "infoLists": ["GTP", "MFR", "CEC"],
        "text": "/m/0qy_1",
        "code": null,
        "desc": "Crescent City, California, USA"
    },
    "Iguazu": {
        "cityMap": {"IGR": "/m/072rzg", "IGU": "/m/0442yh"},
        "type": 3,
        "infoLists": ["IGR", "IGU"],
        "text": "/m/072rzg",
        "code": null,
        "desc": "Puerto Iguazú, Argentina"
    },
    "Alor Setar": {
        "cityMap": {"AOR": "/m/04p9tf"},
        "type": 3,
        "infoLists": ["AOR"],
        "text": "/m/04p9tf",
        "code": null,
        "desc": "Alor Setar, Malaysia"
    },
    "Cranbrook": {
        "cityMap": {"YXC": "/m/02g5cv"},
        "type": 3,
        "infoLists": ["YXC"],
        "text": "/m/02g5cv",
        "code": null,
        "desc": "Cranbrook, British Columbia, Canada"
    },
    "Paphos": {
        "cityMap": {"PFO": "/m/02tyg0"},
        "type": 3,
        "infoLists": ["PFO"],
        "text": "/m/02tyg0",
        "code": null,
        "desc": "Paphos, Cyprus"
    },
    "Kaunas": {
        "cityMap": {"VNO": "/m/07_kq", "KUN": "/m/0171b8"},
        "type": 3,
        "infoLists": ["VNO", "KUN"],
        "text": "/m/0171b8",
        "code": null,
        "desc": "Kaunas, Lithuania"
    },
    "Hamburg": {
        "cityMap": {"HAM": "/m/03hrz"},
        "type": 3,
        "infoLists": ["HAM"],
        "text": "/m/03hrz",
        "code": null,
        "desc": "Hamburg, Germany"
    },
    "Bordeaux": {
        "cityMap": {"BOD": "/m/01b85"},
        "type": 3,
        "infoLists": ["BOD"],
        "text": "/m/01b85",
        "code": null,
        "desc": "Bordeaux, France"
    },
    "Izumo": {
        "cityMap": {"IZO": "/m/01x80p"},
        "type": 3,
        "infoLists": ["IZO"],
        "text": "/m/01x80p",
        "code": null,
        "desc": "Izumo, Japan"
    },
    "Miyako": {
        "cityMap": {"MMY": "/m/0czbck"},
        "type": 3,
        "infoLists": ["MMY"],
        "text": "/m/0421j0",
        "code": null,
        "desc": "Miyako-jima, Japan"
    },
    "Recife": {
        "cityMap": {"REC": "/m/0hdzt"},
        "type": 3,
        "infoLists": ["REC"],
        "text": "/m/0hdzt",
        "code": null,
        "desc": "Recife, Brazil"
    },
    "Calama": {
        "cityMap": {"CJC": "/m/045535"},
        "type": 3,
        "infoLists": ["CJC"],
        "text": "/m/045535",
        "code": null,
        "desc": "Calama, Chile"
    },
    "Fort Mcmurray": {
        "cityMap": {"YMM": "/m/01wmqn"},
        "type": 3,
        "infoLists": ["YMM"],
        "text": "/m/01wmqn",
        "code": null,
        "desc": "Fort McMurray, Alberta, Canada"
    },
    "Geneva": {
        "cityMap": {"GVA": "/m/03902"},
        "type": 3,
        "infoLists": ["GVA"],
        "text": "/m/03902",
        "code": null,
        "desc": "Geneva, Switzerland"
    },
    "Columbus": {
        "cityMap": {"CMH": "/m/01smm"},
        "type": 3,
        "infoLists": ["CMH"],
        "text": "/m/01smm",
        "code": null,
        "desc": "Columbus, Ohio, USA"
    },
    "Antalya": {
        "cityMap": {"AYT": "/m/01_hhp"},
        "type": 3,
        "infoLists": ["AYT"],
        "text": "/m/01_hhp",
        "code": null,
        "desc": "Antalya, Türkiye"
    },
    "Nadi": {
        "cityMap": {"NAN": "/m/022wr3"},
        "type": 3,
        "infoLists": ["NAN"],
        "text": "/m/022wr3",
        "code": null,
        "desc": "Nadi, Fiji"
    },
    "Nashik": {
        "cityMap": {"BOM": "/m/04vmp", "ISK": "/m/037vkk"},
        "type": 3,
        "infoLists": ["BOM", "ISK"],
        "text": "/m/037vkk",
        "code": null,
        "desc": "Nashik, Maharashtra, India"
    },
    "Kota Bharu": {
        "cityMap": {"KBR": "/m/028zq1"},
        "type": 3,
        "infoLists": ["KBR"],
        "text": "/m/028zq1",
        "code": null,
        "desc": "Kota Bharu, Malaysia"
    },
    "Santa Rosa": {
        "cityMap": {"SFO": "/m/0d6lp", "STS": "/m/0r785"},
        "type": 3,
        "infoLists": ["SFO", "STS"],
        "text": "/m/0r785",
        "code": null,
        "desc": "Santa Rosa, California, USA"
    },
    "Almaty": {
        "cityMap": {"ALA": "/m/0151s1"},
        "type": 3,
        "infoLists": ["ALA"],
        "text": "/m/0151s1",
        "code": null,
        "desc": "Almaty, Kazakhstan"
    },
    "Tiruchchirappalli": {"type": 1, "code": "TRZ"},
    "Vadodara": {
        "cityMap": {"BDQ": "/m/02kfxk", "AMD": "/m/01d88c"},
        "type": 3,
        "infoLists": ["BDQ", "AMD"],
        "text": "/m/02kfxk",
        "code": null,
        "desc": "Vadodara, Gujarat, India"
    },
    "Leeds Bradford": {"cityMap": {}, "type": 1, "text": "/m/03qzx1", "code": "LBA", "desc": "Leeds Bradford Airport"},
    "Newcastle": {
        "cityMap": {"NCL": "/m/0j7ng"},
        "type": 3,
        "infoLists": ["NCL"],
        "text": "/m/0j7ng",
        "code": null,
        "desc": "Newcastle upon Tyne, United Kingdom"
    },
    "Pasto": {
        "cityMap": {"PSO": "/m/03j31b"},
        "type": 3,
        "infoLists": ["PSO"],
        "text": "/m/03j31b",
        "code": null,
        "desc": "Pasto, Colombia"
    },
    "Cagayan de Oro": {
        "cityMap": {"CGY": "/m/01sntm"},
        "type": 3,
        "infoLists": ["CGY"],
        "text": "/m/01sntm",
        "code": null,
        "desc": "Cagayan de Oro, Philippines"
    },
    "Venice": {
        "cityMap": {"VCE": "/m/07_pf", "TSF": "/m/07_pf"},
        "type": 3,
        "infoLists": ["VCE", "TSF"],
        "text": "/m/07_pf",
        "code": null,
        "desc": "Venice, Italy"
    },
    "Neuquen": {
        "cityMap": {"NQN": "/m/02tbfg"},
        "type": 3,
        "infoLists": ["NQN"],
        "text": "/m/02tbfg",
        "code": null,
        "desc": "Neuquen, Argentina"
    },
    "Laoag": {
        "cityMap": {"MNL": "/m/0195pd", "LAO": "/m/04fthk"},
        "type": 3,
        "infoLists": ["MNL", "LAO"],
        "text": "/m/04fthk",
        "code": null,
        "desc": "Laoag City, Philippines"
    },
    "Dalian": {
        "cityMap": {"DLC": "/m/01l3k6"},
        "type": 3,
        "infoLists": ["DLC"],
        "text": "/m/01l3k6",
        "code": null,
        "desc": "Dalian, China"
    },
    "Kozhikode": {
        "cityMap": {"CCJ": "/m/0fkbh"},
        "type": 3,
        "infoLists": ["CCJ"],
        "text": "/m/0fkbh",
        "code": null,
        "desc": "Kozhikode, Kerala, India"
    },
    "Terrace": {
        "cityMap": {"YXT": "/m/030rjs"},
        "type": 3,
        "infoLists": ["YXT"],
        "text": "/m/030rjs",
        "code": null,
        "desc": "Terrace, British Columbia, Canada"
    },
    "Bundaberg": {
        "cityMap": {"BDB": "/m/02wvywy", "BNE": "/m/01b8jj", "HVB": "/m/02vz45"},
        "type": 3,
        "infoLists": ["BDB", "BNE", "HVB"],
        "text": "/m/0jlwv",
        "code": null,
        "desc": "Bundaberg Central, Australia"
    },
    "Johannesburg": {
        "cityMap": {"JNB": "/m/0g284"},
        "type": 3,
        "infoLists": ["JNB"],
        "text": "/m/0g284",
        "code": null,
        "desc": "Johannesburg, South Africa"
    },
    "Cape Town": {
        "cityMap": {"CPT": "/m/01yj2"},
        "type": 3,
        "infoLists": ["CPT"],
        "text": "/m/01yj2",
        "code": null,
        "desc": "Cape Town, South Africa"
    },
    "Matsuyama": {
        "cityMap": {"MYJ": "/m/0gp6sg"},
        "type": 3,
        "infoLists": ["MYJ"],
        "text": "/m/0gp6sg",
        "code": null,
        "desc": "Matsuyama, Japan"
    },
    "Sarasota/Bradenton": {
        "cityMap": {},
        "type": 1,
        "text": "/m/01q6hg",
        "code": "SRQ",
        "desc": "Sarasota Bradenton International Airport"
    },
    "Takamatsu": {
        "cityMap": {"TAK": "/m/0gp6rn"},
        "type": 3,
        "infoLists": ["TAK"],
        "text": "/m/0gp6rn",
        "code": null,
        "desc": "Takamatsu, Japan"
    },
    "Auckland": {
        "cityMap": {"AKL": "/m/012ts"},
        "type": 3,
        "infoLists": ["AKL"],
        "text": "/m/012ts",
        "code": null,
        "desc": "Auckland, New Zealand"
    },
    "Ciudad Obregon": {
        "cityMap": {"CEN": "/m/0437ry"},
        "type": 3,
        "infoLists": ["CEN"],
        "text": "/m/0437ry",
        "code": null,
        "desc": "Ciudad Obregón, Mexico"
    },
    "Bergen": {
        "cityMap": {"BGO": "/m/0fm7s"},
        "type": 3,
        "infoLists": ["BGO"],
        "text": "/m/0fm7s",
        "code": null,
        "desc": "Bergen, Norway"
    },
    "Queretaro": {
        "cityMap": {"MEX": "/m/04sqj", "QRO": "/m/01vdb3"},
        "type": 3,
        "infoLists": ["MEX", "QRO"],
        "text": "/m/01vdb3",
        "code": null,
        "desc": "Santiago de Querétaro, Mexico"
    },
    "Aguadilla": {
        "cityMap": {"BQN": "/m/0lhtd", "SJU": "/m/0fw4v"},
        "type": 3,
        "infoLists": ["BQN", "SJU"],
        "text": "/m/0lhtd",
        "code": null,
        "desc": "Aguadilla, Puerto Rico"
    },
    "Accra": {
        "cityMap": {"ACC": "/m/0fnyc"},
        "type": 3,
        "infoLists": ["ACC"],
        "text": "/m/0fnyc",
        "code": null,
        "desc": "Accra, Ghana"
    },
    "Tirana": {
        "cityMap": {"TIA": "/m/07m_f"},
        "type": 3,
        "infoLists": ["TIA"],
        "text": "/m/07m_f",
        "code": null,
        "desc": "Tiranë, Albania"
    },
    "Oujda": {
        "cityMap": {"OUD": "/m/023tz4"},
        "type": 3,
        "infoLists": ["OUD"],
        "text": "/m/023tz4",
        "code": null,
        "desc": "Oujda, Morocco"
    },
    "Helsinki": {
        "cityMap": {"HEL": "/m/03khn"},
        "type": 3,
        "infoLists": ["HEL"],
        "text": "/m/03khn",
        "code": null,
        "desc": "Helsinki, Finland"
    },
    "Puerto Princesa": {
        "cityMap": {"PPS": "/m/06s5d4"},
        "type": 3,
        "infoLists": ["PPS"],
        "text": "/m/06s5d4",
        "code": null,
        "desc": "Puerto Princesa, Philippines"
    },
    "San Pedro Sula": {
        "cityMap": {"SAP": "/m/01dgw0"},
        "type": 3,
        "infoLists": ["SAP"],
        "text": "/m/01dgw0",
        "code": null,
        "desc": "San Pedro Sula, Honduras"
    },
    "Alice Springs": {
        "cityMap": {"ASP": "/m/0193x5"},
        "type": 3,
        "infoLists": ["ASP"],
        "text": "/m/0193x5",
        "code": null,
        "desc": "Alice Springs, Australia"
    },
    "Sevilla": {
        "cityMap": {"SVQ": "/m/09f3c"},
        "type": 3,
        "infoLists": ["SVQ"],
        "text": "/m/09f3c",
        "code": null,
        "desc": "Seville, Spain"
    },
    "Olbia": {
        "cityMap": {"OLB": "/m/0c2d2"},
        "type": 3,
        "infoLists": ["OLB"],
        "text": "/m/0c2d2",
        "code": null,
        "desc": "Olbia, Italy"
    },
    "Kigali": {
        "cityMap": {"KGL": "/m/0fnhf"},
        "type": 3,
        "infoLists": ["KGL"],
        "text": "/m/0fnhf",
        "code": null,
        "desc": "Kigali, Rwanda"
    },
    "Nairobi": {
        "cityMap": {"NBO": "/m/05d49", "WIL": "/m/05d49"},
        "type": 3,
        "infoLists": ["NBO", "WIL"],
        "text": "/m/05d49",
        "code": null,
        "desc": "Nairobi, Kenya"
    },
    "Omaha": {
        "cityMap": {"OMA": "/m/0chrx"},
        "type": 3,
        "infoLists": ["OMA"],
        "text": "/m/0chrx",
        "code": null,
        "desc": "Omaha, Nebraska, USA"
    },
    "Zamboanga": {
        "cityMap": {"ZAM": "/m/09gcb3s"},
        "type": 3,
        "infoLists": ["ZAM"],
        "text": "/m/09gcb3s",
        "code": null,
        "desc": "Zamboanga, Philippines"
    },
    "Guam": {
        "cityMap": {"GUM": "/m/034tl"},
        "type": 3,
        "infoLists": ["GUM"],
        "text": "/m/034tl",
        "code": null,
        "desc": "Guam"
    },
    "Ayacucho": {
        "cityMap": {"AYP": "/m/02pgnv"},
        "type": 3,
        "infoLists": ["AYP"],
        "text": "/m/02pgnv",
        "code": null,
        "desc": "Ayacucho, Peru"
    },
    "Lulea": {
        "cityMap": {"LLA": "/m/03zncj"},
        "type": 3,
        "infoLists": ["LLA"],
        "text": "/m/03zncj",
        "code": null,
        "desc": "Luleå, Sweden"
    },
    "Tumbes": {
        "cityMap": {"TBP": "/m/055cgg"},
        "type": 3,
        "infoLists": ["TBP"],
        "text": "/m/055cgg",
        "code": null,
        "desc": "Tumbes, Peru"
    },
    "Port of Spain": {
        "cityMap": {"POS": "/m/0fs29"},
        "type": 3,
        "infoLists": ["POS"],
        "text": "/m/0fs29",
        "code": null,
        "desc": "Port of Spain, Trinidad & Tobago"
    },
    "Anchorage": {
        "cityMap": {"ANC": "/m/0g_wn2"},
        "type": 3,
        "infoLists": ["ANC"],
        "text": "/m/0g_wn2",
        "code": null,
        "desc": "Anchorage, Alaska, USA"
    },
    "Luxembourg": {
        "cityMap": {"LUX": "/m/0fq8f"},
        "type": 3,
        "infoLists": ["LUX"],
        "text": "/m/04g61",
        "code": null,
        "desc": "Luxembourg"
    },
    "Myrtle Beach": {
        "cityMap": {"MYR": "/m/0_m3k"},
        "type": 3,
        "infoLists": ["MYR"],
        "text": "/m/0_m3k",
        "code": null,
        "desc": "Myrtle Beach, South Carolina, USA"
    },
    "Belfast": {
        "cityMap": {"BFS": "/m/01l63", "BHD": "/m/01l63"},
        "type": 3,
        "infoLists": ["BFS", "BHD"],
        "text": "/m/01l63",
        "code": null,
        "desc": "Belfast, United Kingdom"
    },
    "Nuremberg": {
        "cityMap": {"NUE": "/m/05bkf"},
        "type": 3,
        "infoLists": ["NUE"],
        "text": "/m/05bkf",
        "code": null,
        "desc": "Nuremberg, Germany"
    },
    "Medan": {
        "cityMap": {"KNO": "/m/01_d_n"},
        "type": 3,
        "infoLists": ["KNO"],
        "text": "/m/01_d_n",
        "code": null,
        "desc": "Medan, Indonesia"
    },
    "Allahabad": {"type": 1, "code": "IXD"},
    "Shenyang": {
        "cityMap": {"SHE": "/m/018lwt"},
        "type": 3,
        "infoLists": ["SHE"],
        "text": "/m/018lwt",
        "code": null,
        "desc": "Shenyang, China"
    },
    "Malaga": {
        "cityMap": {"AGP": "/m/01978d"},
        "type": 3,
        "infoLists": ["AGP"],
        "text": "/m/01978d",
        "code": null,
        "desc": "Málaga, Spain"
    },
    "Xi'an": {"type": 1, "code": "SIA"},
    "Miri": {
        "cityMap": {"MYY": "/m/03x621"},
        "type": 3,
        "infoLists": ["MYY"],
        "text": "/m/03x621",
        "code": null,
        "desc": "Miri, Malaysia"
    },
    "Buriram": {"type": 1, "code": "BFV"},
    "Bodrum": {
        "cityMap": {"BJV": "/m/01skxx"},
        "type": 3,
        "infoLists": ["BJV"],
        "text": "/m/01skxx",
        "code": null,
        "desc": "Bodrum, Türkiye"
    },
    "Fuzhou": {
        "cityMap": {"FOC": "/m/01jzm9"},
        "type": 3,
        "infoLists": ["FOC"],
        "text": "/m/01jzm9",
        "code": null,
        "desc": "Fuzhou, China"
    },
    "Raipur": {
        "cityMap": {"RPR": "/m/02t5s4"},
        "type": 3,
        "infoLists": ["RPR"],
        "text": "/m/02t5s4",
        "code": null,
        "desc": "Raipur, Chhattisgarh, India"
    },
    "Multan": {
        "cityMap": {"MUX": "/m/027_dl"},
        "type": 3,
        "infoLists": ["MUX"],
        "text": "/m/027_dl",
        "code": null,
        "desc": "Multan, Pakistan"
    },
    "Indianapolis": {
        "cityMap": {"IND": "/m/0ftxw"},
        "type": 3,
        "infoLists": ["IND"],
        "text": "/m/0ftxw",
        "code": null,
        "desc": "Indianapolis, Indiana, USA"
    },
    "Kashi": {
        "cityMap": {"BOM": "/m/04vmp"},
        "type": 3,
        "infoLists": ["BOM"],
        "text": "/g/11lxl1zvj9",
        "code": null,
        "desc": "Kashid, Maharashtra, India"
    },
    "Hue": {
        "cityMap": {"DAD": "/m/026yqf", "HUI": "/m/0g7sl"},
        "type": 3,
        "infoLists": ["DAD", "HUI"],
        "text": "/m/0g7sl",
        "code": null,
        "desc": "Hue, Vietnam"
    },
    "Harstad-Narvik": {
        "cityMap": {},
        "type": 1,
        "text": "/m/08lpqy",
        "code": "EVE",
        "desc": "Harstad/Narvik Airport, Evenes"
    },
    "Monterrey": {
        "cityMap": {"MTY": "/m/0b2h3"},
        "type": 3,
        "infoLists": ["MTY"],
        "text": "/m/0b2h3",
        "code": null,
        "desc": "Monterrey, Mexico"
    },
    "Deer Lake": {
        "cityMap": {"YDF": "/m/03krbb"},
        "type": 3,
        "infoLists": ["YDF"],
        "text": "/m/03krbb",
        "code": null,
        "desc": "Deer Lake, Newfoundland and Labrador, Canada"
    },
    "Vava'u": {
        "cityMap": {"VAV": "/m/098g5p"},
        "type": 3,
        "infoLists": ["VAV"],
        "text": "/m/098g5p",
        "code": null,
        "desc": "Vava'u, Tonga"
    },
    "Agra": {
        "cityMap": {"DEL": "/m/0dlv0", "AGR": "/m/01zxx9"},
        "type": 3,
        "infoLists": ["DEL", "AGR"],
        "text": "/m/01zxx9",
        "code": null,
        "desc": "Agra, Uttar Pradesh, India"
    },
    "Ponta Delgada": {
        "cityMap": {"PDL": "/m/02phc1"},
        "type": 3,
        "infoLists": ["PDL"],
        "text": "/m/02phc1",
        "code": null,
        "desc": "Ponta Delgada, Portugal"
    },
    "Yanji": {
        "cityMap": {"YNJ": "/m/04t18t"},
        "type": 3,
        "infoLists": ["YNJ"],
        "text": "/m/04t18t",
        "code": null,
        "desc": "Yanji, China"
    },
    "Cagliari": {
        "cityMap": {"CAG": "/m/0c7l_"},
        "type": 3,
        "infoLists": ["CAG"],
        "text": "/m/0c7l_",
        "code": null,
        "desc": "Cagliari, Italy"
    },
    "Appleton": {
        "cityMap": {"ATW": "/m/013nv_"},
        "type": 3,
        "infoLists": ["ATW"],
        "text": "/m/013nv_",
        "code": null,
        "desc": "Appleton, Wisconsin, USA"
    },
    "Vilnius": {
        "cityMap": {"VNO": "/m/07_kq"},
        "type": 3,
        "infoLists": ["VNO"],
        "text": "/m/07_kq",
        "code": null,
        "desc": "Vilnius, Lithuania"
    },
    "Bacolod": {
        "cityMap": {"BCD": "/m/01rmws"},
        "type": 3,
        "infoLists": ["BCD"],
        "text": "/m/01rmws",
        "code": null,
        "desc": "Bacolod, Philippines"
    },
    "Douala": {
        "cityMap": {"DLA": "/m/0dbks"},
        "type": 3,
        "infoLists": ["DLA"],
        "text": "/m/0dbks",
        "code": null,
        "desc": "Douala, Cameroon"
    },
    "Tuxtla Gutierrez": {
        "cityMap": {"TGZ": "/m/01bkyg"},
        "type": 3,
        "infoLists": ["TGZ"],
        "text": "/m/01bkyg",
        "code": null,
        "desc": "Tuxtla Gutiérrez, Mexico"
    },
    "Powell River": {
        "cityMap": {"YPW": "/m/0807prs", "WPL": "/m/0807prs"},
        "type": 3,
        "infoLists": ["YPW", "WPL"],
        "text": "/m/0807prs",
        "code": null,
        "desc": "Powell River, British Columbia, Canada"
    },
    "Des Moines": {
        "cityMap": {"DSM": "/m/02j3w"},
        "type": 3,
        "infoLists": ["DSM"],
        "text": "/m/02j3w",
        "code": null,
        "desc": "Des Moines, Iowa, USA"
    },
    "Wuhan": {
        "cityMap": {"WUH": "/m/0l3cy"},
        "type": 3,
        "infoLists": ["WUH"],
        "text": "/m/0l3cy",
        "code": null,
        "desc": "Wuhan, China"
    },
    "Glasgow": {
        "cityMap": {"GLA": "/m/0hyxv", "EDI": "/m/02m77"},
        "type": 3,
        "infoLists": ["GLA", "EDI"],
        "text": "/m/0hyxv",
        "code": null,
        "desc": "Glasgow, United Kingdom"
    },
    "Vijayawada": {
        "cityMap": {"VGA": "/m/0385k7"},
        "type": 3,
        "infoLists": ["VGA"],
        "text": "/m/0385k7",
        "code": null,
        "desc": "Vijayawada, Andhra Pradesh, India"
    },
    "Taichung": {
        "cityMap": {"RMQ": "/m/01r8pt"},
        "type": 3,
        "infoLists": ["RMQ"],
        "text": "/m/01r8pt",
        "code": null,
        "desc": "Taichung City, Taiwan"
    },
    "Malacca": {
        "cityMap": {"KUL": "/m/049d1", "MKZ": "/m/05fsj1"},
        "type": 3,
        "infoLists": ["KUL", "MKZ"],
        "text": "/m/05fsj1",
        "code": null,
        "desc": "Malacca, Malaysia"
    },
    "Manaus": {
        "cityMap": {"MAO": "/m/02bkk3"},
        "type": 3,
        "infoLists": ["MAO"],
        "text": "/m/02bkk3",
        "code": null,
        "desc": "Manaus, Brazil"
    },
    "Belem": {
        "cityMap": {"BEL": "/g/1pxyyzx3r"},
        "type": 3,
        "infoLists": ["BEL"],
        "text": "/g/1pxyyzx3r",
        "code": null,
        "desc": "Belém, Brazil"
    },
    "Gdansk": {
        "cityMap": {"GDN": "/m/035m6"},
        "type": 3,
        "infoLists": ["GDN"],
        "text": "/m/035m6",
        "code": null,
        "desc": "Gdańsk, Poland"
    },
    "Zhengzhou": {
        "cityMap": {"CGO": "/m/01q9zs"},
        "type": 3,
        "infoLists": ["CGO"],
        "text": "/m/01q9zs",
        "code": null,
        "desc": "Zhengzhou, China"
    },
    "Fukushima": {
        "cityMap": {"SDJ": "/m/01wr43", "FKS": "/m/0gqkx"},
        "type": 3,
        "infoLists": ["SDJ", "FKS"],
        "text": "/m/0gqkx",
        "code": null,
        "desc": "Fukushima, Japan"
    },
    "Cluj-Napoca": {
        "cityMap": {"CLJ": "/m/0p2gq"},
        "type": 3,
        "infoLists": ["CLJ"],
        "text": "/m/0p2gq",
        "code": null,
        "desc": "Cluj-Napoca, Romania"
    },
    "Juliaca": {
        "cityMap": {"JUL": "/m/02v7k9"},
        "type": 3,
        "infoLists": ["JUL"],
        "text": "/m/02v7k9",
        "code": null,
        "desc": "Juliaca, Peru"
    },
    "Pasco": {
        "cityMap": {"PSC": "/m/010qh8"},
        "type": 3,
        "infoLists": ["PSC"],
        "text": "/m/010qh8",
        "code": null,
        "desc": "Pasco, Washington, USA"
    },
    "Idaho Falls": {
        "cityMap": {"IDA": "/m/0s15v", "SLC": "/m/0f2r6"},
        "type": 3,
        "infoLists": ["IDA", "SLC"],
        "text": "/m/0s15v",
        "code": null,
        "desc": "Idaho Falls, Idaho, USA"
    },
    "Salem": {
        "cityMap": {"BLR": "/m/09c17", "MAA": "/m/0c8tk", "SXV": "/m/01jngs"},
        "type": 3,
        "infoLists": ["BLR", "MAA", "SXV"],
        "text": "/m/01jngs",
        "code": null,
        "desc": "Salem, Tamil Nadu, India"
    },
    "Haiphong": {
        "cityMap": {"HPH": "/m/02mbtq", "HAN": "/m/0fnff"},
        "type": 3,
        "infoLists": ["HPH", "HAN"],
        "text": "/m/02mbtq",
        "code": null,
        "desc": "Haiphong, Vietnam"
    },
    "Gwalior": {
        "cityMap": {"GWL": "/m/0196_h", "DEL": "/m/0dlv0"},
        "type": 3,
        "infoLists": ["GWL", "DEL"],
        "text": "/m/0196_h",
        "code": null,
        "desc": "Gwalior, Madhya Pradesh, India"
    },
    "Luang Prabang": {
        "cityMap": {"LPQ": "/m/01cxqb"},
        "type": 3,
        "infoLists": ["LPQ"],
        "text": "/m/01cxqb",
        "code": null,
        "desc": "Luang Prabang, Laos"
    },
    "Ilo-Ilo": {
        "cityMap": {"ILO": "/m/04wdb1"},
        "type": 3,
        "infoLists": ["ILO"],
        "text": "/m/04wdb1",
        "code": null,
        "desc": "Iloilo City, Philippines"
    },
    "Naga": {
        "cityMap": {"HND": "/m/07dfk", "NRT": "/m/07dfk", "MMJ": "/m/012xgc"},
        "type": 3,
        "infoLists": ["HND", "NRT", "MMJ"],
        "text": "/m/0gp5pr",
        "code": null,
        "desc": "Nagano, Japan"
    },
    "Bandar Seri Begawan": {
        "cityMap": {"BWN": "/m/0fn1m"},
        "type": 3,
        "infoLists": ["BWN"],
        "text": "/m/0fn1m",
        "code": null,
        "desc": "Bandar Seri Begawan, Brunei"
    },
    "Curitiba": {
        "cityMap": {"CWB": "/m/028mpr"},
        "type": 3,
        "infoLists": ["CWB"],
        "text": "/m/028mpr",
        "code": null,
        "desc": "Curitiba, Brazil"
    },
    "Hilo": {
        "cityMap": {"ITO": "/m/0r_ch", "KOA": "/m/0r_g0"},
        "type": 3,
        "infoLists": ["ITO", "KOA"],
        "text": "/m/0r_ch",
        "code": null,
        "desc": "Hilo, Hawaii, USA"
    },
    "Paros": {
        "cityMap": {"PAS": "/m/05b2018", "JMK": "/m/02gtbh"},
        "type": 3,
        "infoLists": ["PAS", "JMK"],
        "text": "/m/018x13",
        "code": null,
        "desc": "Paros, Greece"
    },
    "Goteborg": {
        "cityMap": {"GOT": "/m/0343_"},
        "type": 3,
        "infoLists": ["GOT"],
        "text": "/m/0343_",
        "code": null,
        "desc": "Gothenburg, Sweden"
    },
    "Barranquilla": {
        "cityMap": {"BAQ": "/m/02b84b"},
        "type": 3,
        "infoLists": ["BAQ"],
        "text": "/m/02b84b",
        "code": null,
        "desc": "Barranquilla, Colombia"
    },
    "Thanh Hoe": {
        "cityMap": {"THD": "/m/0dv2yn", "HAN": "/m/0fnff"},
        "type": 3,
        "infoLists": ["THD", "HAN"],
        "text": "/m/07m20m",
        "code": null,
        "desc": "Thanh Hóa, Vietnam"
    },
    "Riga": {
        "cityMap": {"RIX": "/m/06cn5"},
        "type": 3,
        "infoLists": ["RIX"],
        "text": "/m/06cn5",
        "code": null,
        "desc": "Riga, Latvia"
    },
    "Turin": {
        "cityMap": {"TRN": "/m/07mgr"},
        "type": 3,
        "infoLists": ["TRN"],
        "text": "/m/07mgr",
        "code": null,
        "desc": "Turin, Italy"
    },
    "Kerkyra": {"type": 1, "code": "CFU"},
    "Bellingham": {
        "cityMap": {"SEA": "/m/0d9jr", "BLI": "/m/09snz"},
        "type": 3,
        "infoLists": ["SEA", "BLI"],
        "text": "/m/09snz",
        "code": null,
        "desc": "Bellingham, Washington, USA"
    },
    "Tokushima": {
        "cityMap": {"TKS": "/m/0gp6r5"},
        "type": 3,
        "infoLists": ["TKS"],
        "text": "/m/0gp6r5",
        "code": null,
        "desc": "Tokushima, Japan"
    },
    "New Haven": {
        "cityMap": {"BDL": "/m/0f1sm", "JFK": "/m/02_286", "HVN": "/m/0f2nf"},
        "type": 3,
        "infoLists": ["BDL", "JFK", "HVN"],
        "text": "/m/0f2nf",
        "code": null,
        "desc": "New Haven, Connecticut, USA"
    },
    "Kilimanjaro": {
        "cityMap": {"JRO": "/m/01513b", "ASV": "/m/03zy3f"},
        "type": 3,
        "infoLists": ["JRO", "ASV"],
        "text": "/m/01513b",
        "code": null,
        "desc": "Mount Kilimanjaro, Tanzania"
    },
    "Basel/Mulhouse": {"type": 1, "code": "EAP"},
    "Hoedspruit": {
        "cityMap": {"HDS": "/m/059567", "MQP": "/m/02jy6b"},
        "type": 3,
        "infoLists": ["HDS", "MQP"],
        "text": "/m/059567",
        "code": null,
        "desc": "Hoedspruit, South Africa"
    },
    "Rochester": {
        "cityMap": {"ROC": "/m/0y1rf"},
        "type": 3,
        "infoLists": ["ROC"],
        "text": "/m/0y1rf",
        "code": null,
        "desc": "Rochester, New York, USA"
    },
    "Tallahassee": {
        "cityMap": {"TLH": "/m/0ftvz"},
        "type": 3,
        "infoLists": ["TLH"],
        "text": "/m/0ftvz",
        "code": null,
        "desc": "Tallahassee, Florida, USA"
    },
    "Bimini": {
        "cityMap": {"BIM": "/m/02rh2c", "NSB": "/m/02rh2c"},
        "type": 3,
        "infoLists": ["BIM", "NSB"],
        "text": "/m/02rh2c",
        "code": null,
        "desc": "Bimini, Bahamas"
    },
    "Valencia": {
        "cityMap": {"VLC": "/m/0h3tv"},
        "type": 3,
        "infoLists": ["VLC"],
        "text": "/m/0h3tv",
        "code": null,
        "desc": "Valencia, Spain"
    },
    "Doha": {
        "cityMap": {"DOH": "/m/0f2yw"},
        "type": 3,
        "infoLists": ["DOH"],
        "text": "/m/0f2yw",
        "code": null,
        "desc": "Doha, Qatar"
    },
    "Abuja": {
        "cityMap": {"ABV": "/m/0fnxw"},
        "type": 3,
        "infoLists": ["ABV"],
        "text": "/m/0fnxw",
        "code": null,
        "desc": "Abuja, Nigeria"
    },
    "Verona": {
        "cityMap": {"VRN": "/m/01n43d", "BGY": "/m/0947l"},
        "type": 3,
        "infoLists": ["VRN", "BGY"],
        "text": "/m/01n43d",
        "code": null,
        "desc": "Verona, Italy"
    },
    "Chihuahua": {
        "cityMap": {"CUU": "/m/01fvzh"},
        "type": 3,
        "infoLists": ["CUU"],
        "text": "/m/01fvzh",
        "code": null,
        "desc": "Chihuahua, Mexico"
    },
    "Male": {
        "cityMap": {"MLE": "/m/0fq9y"},
        "type": 3,
        "infoLists": ["MLE"],
        "text": "/m/0fq9y",
        "code": null,
        "desc": "Malé, Maldives"
    },
    "Dushanbe": {
        "cityMap": {"DYU": "/m/0fnc4"},
        "type": 3,
        "infoLists": ["DYU"],
        "text": "/m/0fnc4",
        "code": null,
        "desc": "Dushanbe, Tajikistan"
    },
    "Duesseldorf": {
        "cityMap": {"DUS": "/m/0hf7l"},
        "type": 3,
        "infoLists": ["DUS"],
        "text": "/m/0hf7l",
        "code": null,
        "desc": "Düsseldorf, Germany"
    },
    "Astana": {
        "cityMap": {"NQZ": "/m/0fn08"},
        "type": 3,
        "infoLists": ["NQZ"],
        "text": "/m/0fn08",
        "code": null,
        "desc": "Astana, Kazakhstan"
    },
    "Salta": {
        "cityMap": {"SLA": "/m/02tb5m"},
        "type": 3,
        "infoLists": ["SLA"],
        "text": "/m/02tb5m",
        "code": null,
        "desc": "Salta, Argentina"
    },
    "Ponce": {
        "cityMap": {"SJU": "/m/0fw4v", "PSE": "/m/0lg0r"},
        "type": 3,
        "infoLists": ["SJU", "PSE"],
        "text": "/m/0lg0r",
        "code": null,
        "desc": "Ponce, Puerto Rico"
    },
    "Chumphon": {
        "cityMap": {"URT": "/m/018k_b", "CJM": "/m/01h975"},
        "type": 3,
        "infoLists": ["URT", "CJM"],
        "text": "/m/01h975",
        "code": null,
        "desc": "Chumphon, Thailand"
    },
    "Hangzhou": {
        "cityMap": {"HGH": "/m/014vm4"},
        "type": 3,
        "infoLists": ["HGH"],
        "text": "/m/014vm4",
        "code": null,
        "desc": "Hangzhou, China"
    },
    "Los Mochis": {
        "cityMap": {"LMM": "/m/01z2n8", "CUL": "/m/01gmml"},
        "type": 3,
        "infoLists": ["LMM", "CUL"],
        "text": "/m/01z2n8",
        "code": null,
        "desc": "Los Mochis, Mexico"
    },
    "Richmond": {
        "cityMap": {"RIC": "/m/0dzt9"},
        "type": 3,
        "infoLists": ["RIC"],
        "text": "/m/0dzt9",
        "code": null,
        "desc": "Richmond, Virginia, USA"
    },
    "Pondicherry": {
        "cityMap": {"MAA": "/m/0c8tk", "PNY": "/m/07779w"},
        "type": 3,
        "infoLists": ["MAA", "PNY"],
        "text": "/m/07779w",
        "code": null,
        "desc": "Puducherry, India"
    },
    "Iquitos": {
        "cityMap": {"IQT": "/m/02v7h6"},
        "type": 3,
        "infoLists": ["IQT"],
        "text": "/m/02v7h6",
        "code": null,
        "desc": "Iquitos, Peru"
    },
    "Kupang": {
        "cityMap": {"KOE": "/m/04xx5d"},
        "type": 3,
        "infoLists": ["KOE"],
        "text": "/m/04xx5d",
        "code": null,
        "desc": "Kupang, Indonesia"
    },
    "General Santos": {
        "cityMap": {"GES": "/m/01stll"},
        "type": 3,
        "infoLists": ["GES"],
        "text": "/m/01stll",
        "code": null,
        "desc": "General Santos City, Philippines"
    },
    "Hefei": {
        "cityMap": {"HFE": "/m/012c8s"},
        "type": 3,
        "infoLists": ["HFE"],
        "text": "/m/012c8s",
        "code": null,
        "desc": "Hefei, China"
    },
    "Nuku'Alofa": {
        "cityMap": {"TBU": "/m/0frzd"},
        "type": 3,
        "infoLists": ["TBU"],
        "text": "/m/0frzd",
        "code": null,
        "desc": "Nuku'alofa, Tonga"
    },
    "Masset": {
        "cityMap": {"ZMT": "/m/0b_9h2"},
        "type": 3,
        "infoLists": ["ZMT"],
        "text": "/m/0b_9h2",
        "code": null,
        "desc": "Masset, British Columbia, Canada"
    },
    "Fes": {
        "cityMap": {"FEZ": "/m/01vcxq"},
        "type": 3,
        "infoLists": ["FEZ"],
        "text": "/m/01vcxq",
        "code": null,
        "desc": "Fes, Morocco"
    },
    "Nanaimo": {
        "cityMap": {"YCD": "/m/01t8rm", "YVR": "/m/080h2"},
        "type": 3,
        "infoLists": ["YCD", "YVR"],
        "text": "/m/01t8rm",
        "code": null,
        "desc": "Nanaimo, British Columbia, Canada"
    },
    "Wichita": {
        "cityMap": {"ICT": "/m/0tbql"},
        "type": 3,
        "infoLists": ["ICT"],
        "text": "/m/0tbql",
        "code": null,
        "desc": "Wichita, Kansas, USA"
    },
    "Managua": {
        "cityMap": {"MGA": "/m/0fqbf"},
        "type": 3,
        "infoLists": ["MGA"],
        "text": "/m/0fqbf",
        "code": null,
        "desc": "Managua, Nicaragua"
    },
    "Cork": {
        "cityMap": {"ORK": "/m/0clz7", "DUB": "/m/02cft"},
        "type": 3,
        "infoLists": ["ORK", "DUB"],
        "text": "/m/0clz7",
        "code": null,
        "desc": "Cork, Ireland"
    },
    "Monterey/Carmel": {"type": 1, "code": "MRY"},
    "Imphal": {
        "cityMap": {"IMF": "/m/02nfl5"},
        "type": 3,
        "infoLists": ["IMF"],
        "text": "/m/02nfl5",
        "code": null,
        "desc": "Imphal, Manipur, India"
    },
    "Rajahmundry": {"cityMap": {}, "type": 1, "text": "/m/0262j6z", "code": "RJA", "desc": "Rajahmundry Airport"},
    "Norfolk": {
        "cityMap": {"ORF": "/m/0fwc0"},
        "type": 3,
        "infoLists": ["ORF"],
        "text": "/m/0fwc0",
        "code": null,
        "desc": "Norfolk, Virginia, USA"
    },
    "Mykonos": {
        "cityMap": {"JMK": "/m/02gtbh"},
        "type": 3,
        "infoLists": ["JMK"],
        "text": "/m/02gtbh",
        "code": null,
        "desc": "Mykonos, Greece"
    },
    "Peshawar": {
        "cityMap": {"PEW": "/m/0hj6h"},
        "type": 3,
        "infoLists": ["PEW"],
        "text": "/m/0hj6h",
        "code": null,
        "desc": "Peshawar, Pakistan"
    },
    "Ras al Khaimah": {
        "cityMap": {"DXB": "/m/01f08r", "SHJ": "/m/03w9gtf", "RKT": "/m/0283_y"},
        "type": 3,
        "infoLists": ["DXB", "SHJ", "RKT"],
        "text": "/g/121djg4n",
        "code": null,
        "desc": "Ras Al-Khaimah - United Arab Emirates"
    },
    "Nejran": {
        "cityMap": {"EAM": "/m/0659tz"},
        "type": 3,
        "infoLists": ["EAM"],
        "text": "/m/0659tz",
        "code": null,
        "desc": "Najran Saudi Arabia"
    },
    "Vitoria": {
        "cityMap": {"VIX": "/m/02ydp3"},
        "type": 3,
        "infoLists": ["VIX"],
        "text": "/m/02ydp3",
        "code": null,
        "desc": "Vitoria, Brazil"
    },
    "Bareilly": {
        "cityMap": {"DEL": "/m/0dlv0", "BEK": "/m/03y7cn"},
        "type": 3,
        "infoLists": ["DEL", "BEK"],
        "text": "/m/03y7cn",
        "code": null,
        "desc": "Bareilly, Uttar Pradesh, India"
    },
    "Makassar": {
        "cityMap": {"UPG": "/m/022h47"},
        "type": 3,
        "infoLists": ["UPG"],
        "text": "/m/022h47",
        "code": null,
        "desc": "Makassar, Indonesia"
    },
    "Foz do Iguacu": {
        "cityMap": {"IGU": "/m/0442yh"},
        "type": 3,
        "infoLists": ["IGU"],
        "text": "/m/0442yh",
        "code": null,
        "desc": "Foz do Iguaçu, Brazil"
    },
    "South Bend": {
        "cityMap": {"SBN": "/m/0sq2v", "ORD": "/m/01_d4"},
        "type": 3,
        "infoLists": ["SBN", "ORD"],
        "text": "/m/0sq2v",
        "code": null,
        "desc": "South Bend, Indiana, USA"
    },
    "Punta Gorda": {
        "cityMap": {"PGD": "/m/0rjvt", "RSW": "/m/0rmby"},
        "type": 3,
        "infoLists": ["PGD", "RSW"],
        "text": "/m/0rjvt",
        "code": null,
        "desc": "Punta Gorda, Florida, USA"
    },
    "Busuanga": {
        "cityMap": {"USU": "/m/02hqn1"},
        "type": 3,
        "infoLists": ["USU"],
        "text": "/m/02hqn1",
        "code": null,
        "desc": "Busuanga, Philippines"
    },
    "Oklahoma City": {
        "cityMap": {"OKC": "/m/0fvzg"},
        "type": 3,
        "infoLists": ["OKC"],
        "text": "/m/0fvzg",
        "code": null,
        "desc": "Oklahoma City, Oklahoma, USA"
    },
    "Townsville": {
        "cityMap": {"TSV": "/m/01q58t"},
        "type": 3,
        "infoLists": ["TSV"],
        "text": "/m/01q58t",
        "code": null,
        "desc": "Townsville City, Australia"
    },
    "Weihai": {
        "cityMap": {"WEH": "/m/04lghr"},
        "type": 3,
        "infoLists": ["WEH"],
        "text": "/m/04lghr",
        "code": null,
        "desc": "Weihai, China"
    },
    "Quebec": {
        "cityMap": {"YQB": "/m/0pmp2", "YUL": "/m/052p7"},
        "type": 3,
        "infoLists": ["YQB", "YUL"],
        "text": "/m/0pmp2",
        "code": null,
        "desc": "Québec City, Quebec, Canada"
    },
    "Labuan": {
        "cityMap": {"LBU": "/m/0209_r"},
        "type": 3,
        "infoLists": ["LBU"],
        "text": "/m/0209_r",
        "code": null,
        "desc": "Labuan, Malaysia"
    },
    "Okayama": {
        "cityMap": {"OKJ": "/m/0gp5my"},
        "type": 3,
        "infoLists": ["OKJ"],
        "text": "/m/0gp5my",
        "code": null,
        "desc": "Okayama, Japan"
    },
    "Belo Horizonte": {
        "cityMap": {"CNF": "/m/0l3q2"},
        "type": 3,
        "infoLists": ["CNF"],
        "text": "/m/0l3q2",
        "code": null,
        "desc": "Belo Horizonte, Brazil"
    },
    "Veracruz": {
        "cityMap": {"VER": "/m/02_rzt"},
        "type": 3,
        "infoLists": ["VER"],
        "text": "/m/02_rzt",
        "code": null,
        "desc": "Heroica Veracruz, Mexico"
    },
    "Dibrugarh": {
        "cityMap": {"DIB": "/m/09bg8z"},
        "type": 3,
        "infoLists": ["DIB"],
        "text": "/m/09bg8z",
        "code": null,
        "desc": "Dibrugarh, Assam, India"
    },
    "Eindhoven": {
        "cityMap": {"EIN": "/m/02kx3", "AMS": "/m/0k3p"},
        "type": 3,
        "infoLists": ["EIN", "AMS"],
        "text": "/m/02kx3",
        "code": null,
        "desc": "Eindhoven, Netherlands"
    },
    "Siem Reap": {
        "cityMap": {"SAI": "/m/0ggdlz"},
        "type": 3,
        "infoLists": ["SAI"],
        "text": "/m/0ggdlz",
        "code": null,
        "desc": "Krong Siem Reap, Cambodia"
    },
    "Belize City": {
        "cityMap": {"BZE": "/m/0177xm"},
        "type": 3,
        "infoLists": ["BZE"],
        "text": "/m/0177xm",
        "code": null,
        "desc": "Belize City, Belize"
    },
    "Placencia": {
        "cityMap": {"PLJ": "/m/01jhvr", "BZE": "/m/0177xm", "DGA": "/m/01780z"},
        "type": 3,
        "infoLists": ["PLJ", "BZE", "DGA"],
        "text": "/m/01jhvr",
        "code": null,
        "desc": "Placencia, Belize"
    },
    "Launceston": {
        "cityMap": {"LST": "/m/026wfwk"},
        "type": 3,
        "infoLists": ["LST"],
        "text": "/m/01nf9x",
        "code": null,
        "desc": "Launceston, Australia"
    },
    "Flores": {
        "cityMap": {"FRS": "/m/01nyff"},
        "type": 3,
        "infoLists": ["FRS"],
        "text": "/m/01nyff",
        "code": null,
        "desc": "Flores, Guatemala"
    },
    "Misawa": {
        "cityMap": {"MSJ": "/m/01wfly", "AOJ": "/m/0gqhy"},
        "type": 3,
        "infoLists": ["MSJ", "AOJ"],
        "text": "/m/01wfly",
        "code": null,
        "desc": "Misawa, Japan"
    },
    "Kununurra": {
        "cityMap": {"KNX": "/m/01sl4d"},
        "type": 3,
        "infoLists": ["KNX"],
        "text": "/m/01sl4d",
        "code": null,
        "desc": "Kununurra, Australia"
    },
    "Bintulu": {
        "cityMap": {"BTU": "/g/11bc6xklnj"},
        "type": 3,
        "infoLists": ["BTU"],
        "text": "/g/11bc6xklnj",
        "code": null,
        "desc": "Bintulu, Malaysia"
    },
    "Panama City": {
        "cityMap": {"PTY": "/m/0fr_b"},
        "type": 3,
        "infoLists": ["PTY"],
        "text": "/m/0fr_b",
        "code": null,
        "desc": "Panama City, Panama"
    },
    "Watertown": {
        "cityMap": {"FSD": "/m/013l6l", "MSP": "/m/0fpzwf", "FAR": "/m/0ynfz", "ATY": "/m/0_ps5"},
        "type": 3,
        "infoLists": ["FSD", "MSP", "FAR", "ATY"],
        "text": "/m/0_ps5",
        "code": null,
        "desc": "Watertown, South Dakota, USA"
    },
    "Massena": {
        "cityMap": {"MSS": "/m/03z0q4", "SLK": "/m/013hk1"},
        "type": 3,
        "infoLists": ["MSS", "SLK"],
        "text": "/m/03z0q4",
        "code": null,
        "desc": "Massena, New York, USA"
    },
    "Mount Gambier": {
        "cityMap": {"MGB": "/g/11bc64x0j4"},
        "type": 3,
        "infoLists": ["MGB"],
        "text": "/m/03czdk",
        "code": null,
        "desc": "Mount Gambier"
    },
    "Concepcion": {
        "cityMap": {"CCP": "/m/0k18k"},
        "type": 3,
        "infoLists": ["CCP"],
        "text": "/m/0k18k",
        "code": null,
        "desc": "Concepción, Chile"
    },
    "Tours": {
        "cityMap": {"CDG": "/m/05qtj", "TUF": "/m/07s3m"},
        "type": 3,
        "infoLists": ["CDG", "TUF"],
        "text": "/m/07s3m",
        "code": null,
        "desc": "Tours, France"
    },
    "Nottingham": {
        "cityMap": {"EMA": "/m/09tlh"},
        "type": 3,
        "infoLists": ["EMA"],
        "text": "/m/09tlh",
        "code": null,
        "desc": "Nottingham, United Kingdom"
    },
    "El Calafate": {
        "cityMap": {"FTE": "/m/0bzq9k"},
        "type": 3,
        "infoLists": ["FTE"],
        "text": "/m/0bzq9k",
        "code": null,
        "desc": "El Calafate, Argentina"
    },
    "Temuco": {
        "cityMap": {"ZCO": "/m/01rjhh"},
        "type": 3,
        "infoLists": ["ZCO"],
        "text": "/m/01rjhh",
        "code": null,
        "desc": "Temuco, Chile"
    },
    "Rockhampton": {
        "cityMap": {"ROK": "/m/01l53f"},
        "type": 3,
        "infoLists": ["ROK"],
        "text": "/m/01l53f",
        "code": null,
        "desc": "Rockhampton City, Australia"
    },
    "Aizawl": {
        "cityMap": {"AJL": "/g/11bc57bkj9"},
        "type": 3,
        "infoLists": ["AJL"],
        "text": "/g/11bc57bkj9",
        "code": null,
        "desc": "Aizawl, Mizoram, India"
    },
    "Clovis": {
        "cityMap": {
            "LBB": "/m/0105y2",
            "AMA": "/m/013n60",
            "MAF": "/m/013n2h",
            "CVN": "/m/0xtw4",
            "ABQ": "/m/0djd3"
        },
        "type": 3,
        "infoLists": ["LBB", "AMA", "MAF", "CVN", "ABQ"],
        "text": "/m/0xtw4",
        "code": null,
        "desc": "Clovis, New Mexico, USA"
    },
    "La Rochelle": {
        "cityMap": {"NTE": "/m/0hqzr", "LRH": "/m/0qb48"},
        "type": 3,
        "infoLists": ["NTE", "LRH"],
        "text": "/m/0qb48",
        "code": null,
        "desc": "La Rochelle, France"
    },
    "Asahikawa": {
        "cityMap": {"AKJ": "/m/01wf54", "CTS": "/m/0gp5l6"},
        "type": 3,
        "infoLists": ["AKJ", "CTS"],
        "text": "/m/01wf54",
        "code": null,
        "desc": "Asahikawa, Japan"
    },
    "Wilmington": {
        "cityMap": {"ILM": "/m/0yj9v"},
        "type": 3,
        "infoLists": ["ILM"],
        "text": "/m/0yj9v",
        "code": null,
        "desc": "Wilmington, North Carolina, USA"
    },
    "Trail": {
        "cityMap": {"YZZ": "/m/045prs", "YCG": "/m/04d6qb"},
        "type": 3,
        "infoLists": ["YZZ", "YCG"],
        "text": "/m/045prs",
        "code": null,
        "desc": "Trail, British Columbia, Canada"
    },
    "Ankara": {
        "cityMap": {"ESB": "/m/0jyw"},
        "type": 3,
        "infoLists": ["ESB"],
        "text": "/m/0jyw",
        "code": null,
        "desc": "Ankara, Türkiye"
    },
    "Pangkalanbun": {
        "cityMap": {"PKN": "/m/0z6qpwh"},
        "type": 3,
        "infoLists": ["PKN"],
        "text": "/m/0z6qpwh",
        "code": null,
        "desc": "Pangkalan Bun, Indonesia"
    },
    "Sakon Nakhon": {
        "cityMap": {"SNO": "/m/04q9pl"},
        "type": 3,
        "infoLists": ["SNO"],
        "text": "/m/01kd42",
        "code": null,
        "desc": "Sakon Nakhon, Thailand"
    },
    "Mendoza": {
        "cityMap": {"MDZ": "/m/02mtwt"},
        "type": 3,
        "infoLists": ["MDZ"],
        "text": "/m/02mtwt",
        "code": null,
        "desc": "Mendoza, Argentina"
    },
    "Jodhpur": {
        "cityMap": {"JDH": "/m/03wk0f"},
        "type": 3,
        "infoLists": ["JDH"],
        "text": "/m/03wk0f",
        "code": null,
        "desc": "Jodhpur, Rajasthan, India"
    },
    "Nha Trang": {
        "cityMap": {"CXR": "/m/044cjv"},
        "type": 3,
        "infoLists": ["CXR"],
        "text": "/m/044cjv",
        "code": null,
        "desc": "Nha Trang, Vietnam"
    },
    "Izmir": {"type": 1, "code": "IZM"},
    "Reykjavik": {"type": 1, "code": "REK"},
    "Nanjing": {
        "cityMap": {"NKG": "/m/05gqy"},
        "type": 3,
        "infoLists": ["NKG"],
        "text": "/m/05gqy",
        "code": null,
        "desc": "Nanjing, China"
    },
    "Sylhet": {
        "cityMap": {"ZYL": "/m/02td2x"},
        "type": 3,
        "infoLists": ["ZYL"],
        "text": "/m/02td2x",
        "code": null,
        "desc": "Sylhet, Bangladesh"
    },
    "Bhavnagar": {
        "cityMap": {"AMD": "/m/01d88c", "BHU": "/m/04ply2"},
        "type": 3,
        "infoLists": ["AMD", "BHU"],
        "text": "/m/04ply2",
        "code": null,
        "desc": "Bhavnagar, Gujarat, India"
    },
    "Provo": {
        "cityMap": {"SLC": "/m/0f2r6", "PVU": "/m/0l39b"},
        "type": 3,
        "infoLists": ["SLC", "PVU"],
        "text": "/m/0l39b",
        "code": null,
        "desc": "Provo, Utah, USA"
    },
    "Proserpine": {
        "cityMap": {"PPP": "/m/07ngfq", "MKY": "/m/03kr2n"},
        "type": 3,
        "infoLists": ["PPP", "MKY"],
        "text": "/m/07ngfq",
        "code": null,
        "desc": "Proserpine, Australia"
    },
    "Tuticorin": {"cityMap": {}, "type": 1, "text": "/m/02pjm_n", "code": "TCR", "desc": "Tuticorin Airport"},
    "Syracuse": {
        "cityMap": {"SYR": "/m/071cn"},
        "type": 3,
        "infoLists": ["SYR"],
        "text": "/m/071cn",
        "code": null,
        "desc": "Syracuse, New York, USA"
    },
    "Kamloops": {
        "cityMap": {"YKA": "/m/01wj17"},
        "type": 3,
        "infoLists": ["YKA"],
        "text": "/m/01wj17",
        "code": null,
        "desc": "Kamloops, British Columbia, Canada"
    },
    "Montevideo": {
        "cityMap": {"MVD": "/m/09jp3"},
        "type": 3,
        "infoLists": ["MVD"],
        "text": "/m/09jp3",
        "code": null,
        "desc": "Montevideo, Uruguay"
    },
    "Tabuk": {
        "cityMap": {"TUU": "/m/03n51t"},
        "type": 3,
        "infoLists": ["TUU"],
        "text": "/m/03n51t",
        "code": null,
        "desc": "Tabuk Saudi Arabia"
    },
    "White Plains": {
        "cityMap": {"JFK": "/m/02_286", "LGA": "/m/02_286", "HPN": "/m/0cymp"},
        "type": 3,
        "infoLists": ["JFK", "LGA", "HPN"],
        "text": "/m/0ycht",
        "code": null,
        "desc": "White Plains, New York, USA"
    },
    "Agatti Island": {
        "cityMap": {"AGX": "/m/06qgmf"},
        "type": 3,
        "infoLists": ["AGX"],
        "text": "/m/06qgmf",
        "code": null,
        "desc": "Agatti Island, Lakshadweep, India"
    },
    "Hurghada": {
        "cityMap": {"HRG": "/m/02xbzj"},
        "type": 3,
        "infoLists": ["HRG"],
        "text": "/m/02xbzj",
        "code": null,
        "desc": "Hurghada, Egypt"
    },
    "Pereira": {
        "cityMap": {"PEI": "/m/05j_kd"},
        "type": 3,
        "infoLists": ["PEI"],
        "text": "/m/05j_kd",
        "code": null,
        "desc": "Pereira, Colombia"
    },
    "Ayers Rock": {"cityMap": {}, "type": 1, "text": "/m/07bccb", "code": "AYQ", "desc": "Ayers Rock Airport"},
    "Karratha": {
        "cityMap": {"KTA": "/m/052dgn"},
        "type": 3,
        "infoLists": ["KTA"],
        "text": "/m/052dgn",
        "code": null,
        "desc": "Karratha, Australia"
    },
    "Islip": {
        "cityMap": {"JFK": "/m/02_286", "LGA": "/m/02_286", "ISP": "/m/01mgcj"},
        "type": 3,
        "infoLists": ["JFK", "LGA", "ISP"],
        "text": "/m/01mgcj",
        "code": null,
        "desc": "Islip, New York, USA"
    },
    "Deoghar": {
        "cityMap": {"CCU": "/m/0cvw9", "DGH": "/m/05kfmn"},
        "type": 3,
        "infoLists": ["CCU", "DGH"],
        "text": "/m/05kfmn",
        "code": null,
        "desc": "Deoghar, Jharkhand, India"
    },
    "Hubli": {
        "cityMap": {"GOX": "/m/01c1nm", "IXG": "/m/035z4p", "HBX": "/m/016bf5", "GOI": "/m/01c1nm"},
        "type": 3,
        "infoLists": ["GOX", "IXG", "HBX", "GOI"],
        "text": "/g/11vj7lnyb",
        "code": null,
        "desc": "M K Hubli, Karnataka, India"
    },
    "Ercan": {"cityMap": {}, "type": 1, "text": "/m/0767_x", "code": "ECN", "desc": "Ercan International Airport"},
    "Chetumal": {
        "cityMap": {"CTM": "/m/01bgx7"},
        "type": 3,
        "infoLists": ["CTM"],
        "text": "/m/01bgx7",
        "code": null,
        "desc": "Chetumal, Mexico"
    },
    "Georgetown": {
        "cityMap": {"GEO": "/m/0fnm3"},
        "type": 3,
        "infoLists": ["GEO"],
        "text": "/m/0fnm3",
        "code": null,
        "desc": "Georgetown, Guyana"
    },
    "Bucaramanga": {
        "cityMap": {"BGA": "/m/037ysc"},
        "type": 3,
        "infoLists": ["BGA"],
        "text": "/m/037ysc",
        "code": null,
        "desc": "Bucaramanga, Colombia"
    },
    "Reus": {
        "cityMap": {"BCN": "/m/01f62", "REU": "/m/0jwy7"},
        "type": 3,
        "infoLists": ["BCN", "REU"],
        "text": "/m/0jwy7",
        "code": null,
        "desc": "Reus, Spain"
    },
    "Easter Island": {
        "cityMap": {"IPC": "/m/0d_zz"},
        "type": 3,
        "infoLists": ["IPC"],
        "text": "/m/0d_zz",
        "code": null,
        "desc": "Easter Island, Chile"
    },
    "Savannah": {
        "cityMap": {"SAV": "/m/0lhn5"},
        "type": 3,
        "infoLists": ["SAV"],
        "text": "/m/0lhn5",
        "code": null,
        "desc": "Savannah, Georgia, USA"
    },
    "Louisville": {
        "cityMap": {"SDF": "/m/0f__1"},
        "type": 3,
        "infoLists": ["SDF"],
        "text": "/m/0f__1",
        "code": null,
        "desc": "Louisville, Kentucky, USA"
    },
    "Juazeiro do Norte": {
        "cityMap": {"JDO": "/m/08fpgt"},
        "type": 3,
        "infoLists": ["JDO"],
        "text": "/m/08fpgt",
        "code": null,
        "desc": "Juazeiro do Norte, Brazil"
    },
    "Maputo": {
        "cityMap": {"MPM": "/m/0fqby"},
        "type": 3,
        "infoLists": ["MPM"],
        "text": "/m/0fqby",
        "code": null,
        "desc": "Maputo, Mozambique"
    },
    "Kabul": {
        "cityMap": {"KBL": "/m/0494n"},
        "type": 3,
        "infoLists": ["KBL"],
        "text": "/m/0494n",
        "code": null,
        "desc": "Kabul, Afghanistan"
    },
    "Ikaria Island": {"type": 1, "code": "JIK"},
    "Concord": {
        "cityMap": {"CLT": "/m/0fsb8", "USA": "/m/0ydxr"},
        "type": 3,
        "infoLists": ["CLT", "USA"],
        "text": "/m/0ydxr",
        "code": null,
        "desc": "Concord, North Carolina, USA"
    },
    "Durgapur": {
        "cityMap": {"CCU": "/m/0cvw9", "RDP": "/m/05sjbp"},
        "type": 3,
        "infoLists": ["CCU", "RDP"],
        "text": "/m/05sjbp",
        "code": null,
        "desc": "Durgapur, West Bengal, India"
    },
    "Bacau": {
        "cityMap": {"BCM": "/m/0gpfv", "OTP": "/m/096gm"},
        "type": 3,
        "infoLists": ["BCM", "OTP"],
        "text": "/m/0gpfv",
        "code": null,
        "desc": "Bacău, Romania"
    },
    "Bhuj": {
        "cityMap": {"AMD": "/m/01d88c", "BHJ": "/m/045d7j"},
        "type": 3,
        "infoLists": ["AMD", "BHJ"],
        "text": "/m/045d7j",
        "code": null,
        "desc": "Bhuj, Gujarat, India"
    },
    "Yamagata": {
        "cityMap": {"SDJ": "/m/01wr43", "GAJ": "/m/01wgck"},
        "type": 3,
        "infoLists": ["SDJ", "GAJ"],
        "text": "/m/01wgck",
        "code": null,
        "desc": "Yamagata, Japan"
    },
    "Puerto Plata": {
        "cityMap": {"POP": "/m/0bh2qq"},
        "type": 3,
        "infoLists": ["POP"],
        "text": "/m/0bh2qq",
        "code": null,
        "desc": "Puerto Plata, Dominican Republic"
    },
    "Constantine": {
        "cityMap": {"CZL": "/m/02d4_q"},
        "type": 3,
        "infoLists": ["CZL"],
        "text": "/m/02d4_q",
        "code": null,
        "desc": "Constantine, Algeria"
    },
    "Mahe Island": {"type": 1, "code": "SEZ"},
    "Ranong": {
        "cityMap": {"URT": "/m/018k_b", "UNN": "/m/01hc2w", "HKT": "/m/0f_r1_", "KAW": "/m/03hkfbc"},
        "type": 3,
        "infoLists": ["URT", "UNN", "HKT", "KAW"],
        "text": "/m/04qh3r",
        "code": null,
        "desc": "Ranong, Thailand"
    },
    "Cucuta": {
        "cityMap": {"CUC": "/m/02xtlk"},
        "type": 3,
        "infoLists": ["CUC"],
        "text": "/m/02xtlk",
        "code": null,
        "desc": "Cúcuta, Colombia"
    },
    "Belgaum": {"type": 1, "code": "IXG"},
    "Shirdi": {
        "cityMap": {"SAG": "/m/029v70", "PNQ": "/m/015y2q", "BOM": "/m/04vmp"},
        "type": 3,
        "infoLists": ["SAG", "PNQ", "BOM"],
        "text": "/m/029v70",
        "code": null,
        "desc": "Shirdi, Maharashtra, India"
    },
    "Udon Thani": {
        "cityMap": {"UTH": "/m/01dzgd"},
        "type": 3,
        "infoLists": ["UTH"],
        "text": "/m/01dzgd",
        "code": null,
        "desc": "Udon Thani, Thailand"
    },
    "Lyon": {
        "cityMap": {"LYS": "/m/0dprg"},
        "type": 3,
        "infoLists": ["LYS"],
        "text": "/m/0dprg",
        "code": null,
        "desc": "Lyon, France"
    },
    "Novosibirsk": {
        "cityMap": {"OVB": "/m/0gzyb"},
        "type": 3,
        "infoLists": ["OVB"],
        "text": "/m/0gzyb",
        "code": null,
        "desc": "Novosibirsk, Russia"
    },
    "Nador": {
        "cityMap": {"NDR": "/m/05cp25"},
        "type": 3,
        "infoLists": ["NDR"],
        "text": "/m/05cp25",
        "code": null,
        "desc": "Nador, Morocco"
    },
    "Sault Ste Marie": {
        "cityMap": {"YAM": "/m/01hhyb"},
        "type": 3,
        "infoLists": ["YAM"],
        "text": "/m/01hhyb",
        "code": null,
        "desc": "Sault Ste. Marie, Ontario, Canada"
    },
    "Rabat": {
        "cityMap": {"CMN": "/m/022b_", "RBA": "/m/0fs44"},
        "type": 3,
        "infoLists": ["CMN", "RBA"],
        "text": "/m/0fs44",
        "code": null,
        "desc": "Rabat, Morocco"
    },
    "Agadir": {
        "cityMap": {"AGA": "/m/01p19r"},
        "type": 3,
        "infoLists": ["AGA"],
        "text": "/m/01p19r",
        "code": null,
        "desc": "Agadir, Morocco"
    },
    "Jinju": {
        "cityMap": {"PUS": "/m/0hv7l", "HIN": "/m/03v9yf"},
        "type": 3,
        "infoLists": ["PUS", "HIN"],
        "text": "/m/03v9yf",
        "code": null,
        "desc": "Jinju-si, South Korea"
    },
    "Kinmen": {
        "cityMap": {"KNH": "/m/015vxq"},
        "type": 3,
        "infoLists": ["KNH"],
        "text": "/m/015vxq",
        "code": null,
        "desc": "Kinmen Islands"
    },
    "Makhachkala": {
        "cityMap": {"MCX": "/m/02dpch"},
        "type": 3,
        "infoLists": ["MCX"],
        "text": "/m/02dpch",
        "code": null,
        "desc": "Makhachkala, Russia"
    },
    "Mackay": {
        "cityMap": {"MKY": "/m/03kr2n"},
        "type": 3,
        "infoLists": ["MKY"],
        "text": "/m/03kr2n",
        "code": null,
        "desc": "Mackay, Australia"
    },
    "Tucuman": {
        "cityMap": {"TUC": "/m/02f5jb"},
        "type": 3,
        "infoLists": ["TUC"],
        "text": "/m/02f5jb",
        "code": null,
        "desc": "San Miguel de Tucumán, Argentina"
    },
    "St Thomas Island": {"type": 1, "code": "STT"},
    "Toulouse": {
        "cityMap": {"TLS": "/m/0cbhh"},
        "type": 3,
        "infoLists": ["TLS"],
        "text": "/m/0cbhh",
        "code": null,
        "desc": "Toulouse, France"
    },
    "Surat Thani": {
        "cityMap": {"URT": "/m/018k_b"},
        "type": 3,
        "infoLists": ["URT"],
        "text": "/m/02ft8r",
        "code": null,
        "desc": "Surat Thani, Thailand"
    },
    "Puebla": {
        "cityMap": {"MEX": "/m/04sqj", "PBC": "/m/09v0zy7"},
        "type": 3,
        "infoLists": ["MEX", "PBC"],
        "text": "/m/0183z_",
        "code": null,
        "desc": "Puebla, Mexico"
    },
    "Aurangabad": {"cityMap": {}, "type": 1, "text": "/m/026269b", "code": "IXU", "desc": "Aurangabad Airport"},
    "Dharamsala": {
        "cityMap": {"DHM": "/m/0j65lnw"},
        "type": 3,
        "infoLists": ["DHM"],
        "text": "/m/0j65lnw",
        "code": null,
        "desc": "Dharamshala, Himachal Pradesh, India"
    },
    "Krakow": {
        "cityMap": {"KRK": "/m/0491y"},
        "type": 3,
        "infoLists": ["KRK"],
        "text": "/m/0491y",
        "code": null,
        "desc": "Kraków, Poland"
    },
    "Alotau": {
        "cityMap": {"GUR": "/m/0f4d9b"},
        "type": 3,
        "infoLists": ["GUR"],
        "text": "/m/0f4d9b",
        "code": null,
        "desc": "Alotau, Papua New Guinea"
    },
    "Sfax": {
        "cityMap": {"TUN": "/m/0ftn8", "MIR": "/m/02_pwl", "SFA": "/m/06t1kx"},
        "type": 3,
        "infoLists": ["TUN", "MIR", "SFA"],
        "text": "/m/06t1kx",
        "code": null,
        "desc": "Sfax, Tunisia"
    },
    "Kalgoorlie-Boulder": {
        "cityMap": {"KGI": "/m/0j322"},
        "type": 3,
        "infoLists": ["KGI"],
        "text": "/m/0j322",
        "code": null,
        "desc": "Kalgoorlie - Boulder, Australia"
    },
    "Quang Ninh": {
        "cityMap": {"VDO": "/m/03mcwtx"},
        "type": 3,
        "infoLists": ["VDO"],
        "text": "/m/06g_s9",
        "code": null,
        "desc": "Quảng Ninh, Vietnam"
    },
    "Gladstone": {
        "cityMap": {"GLT": "/m/02l38j", "ROK": "/m/01l53f"},
        "type": 3,
        "infoLists": ["GLT", "ROK"],
        "text": "/m/02l38j",
        "code": null,
        "desc": "Gladstone Central, Australia"
    },
    "Orebro": {
        "cityMap": {"ARN": "/m/06mxs", "ORB": "/m/03zjwm"},
        "type": 3,
        "infoLists": ["ARN", "ORB"],
        "text": "/m/03zjwm",
        "code": null,
        "desc": "Örebro, Sweden"
    },
    "Baltra Island": {
        "cityMap": {"GPS": "/m/0cd9lt"},
        "type": 3,
        "infoLists": ["GPS"],
        "text": "/m/0cd9lt",
        "code": null,
        "desc": "Baltra Island, Ecuador"
    },
    "Dimapur": {
        "cityMap": {"DMU": "/m/06stgs"},
        "type": 3,
        "infoLists": ["DMU"],
        "text": "/m/06stgs",
        "code": null,
        "desc": "Dimapur, Nagaland, India"
    },
    "Gaya": {
        "cityMap": {"GAY": "/m/04r806", "PAT": "/m/027wvb"},
        "type": 3,
        "infoLists": ["GAY", "PAT"],
        "text": "/m/01gyy0",
        "code": null,
        "desc": "Bodh Gaya, Bihar, India"
    },
    "Nimes": {
        "cityMap": {"MRS": "/m/0jdtt", "MPL": "/m/0jq27", "FNI": "/m/0pzcv"},
        "type": 3,
        "infoLists": ["MRS", "MPL", "FNI"],
        "text": "/m/0pzcv",
        "code": null,
        "desc": "Nîmes, France"
    },
    "Durban": {
        "cityMap": {"DUR": "/m/01tjvv"},
        "type": 3,
        "infoLists": ["DUR"],
        "text": "/m/01tjvv",
        "code": null,
        "desc": "Durban, South Africa"
    },
    "Damascus": {
        "cityMap": {"DAM": "/m/02gjp", "BEY": "/m/09bjv"},
        "type": 3,
        "infoLists": ["DAM", "BEY"],
        "text": "/m/02gjp",
        "code": null,
        "desc": "Damascus, Syria"
    },
    "Jharsuguda": {
        "cityMap": {"JRG": "/m/0cml0d", "BBI": "/m/03czqs"},
        "type": 3,
        "infoLists": ["JRG", "BBI"],
        "text": "/m/0cml0d",
        "code": null,
        "desc": "Jharsuguda, Odisha, India"
    },
    "Coffs Harbour": {
        "cityMap": {"CFS": "/m/0ydsk"},
        "type": 3,
        "infoLists": ["CFS"],
        "text": "/m/0ydsk",
        "code": null,
        "desc": "Coffs Harbour, Australia"
    },
    "Shannon": {
        "cityMap": {"SNN": "/m/02lpw5"},
        "type": 3,
        "infoLists": ["SNN"],
        "text": "/m/02lpw5",
        "code": null,
        "desc": "Shannon, Ireland"
    },
    "Tbilisi": {
        "cityMap": {"TBS": "/m/0bm4j"},
        "type": 3,
        "infoLists": ["TBS"],
        "text": "/m/0bm4j",
        "code": null,
        "desc": "Tbilisi, Georgia"
    },
    "Jersey": {
        "cityMap": {"JER": "/m/03_xj"},
        "type": 3,
        "infoLists": ["JER"],
        "text": "/m/03_xj",
        "code": null,
        "desc": "Jersey"
    },
    "Toyama": {
        "cityMap": {"TOY": "/m/0gp59q"},
        "type": 3,
        "infoLists": ["TOY"],
        "text": "/m/0gp59q",
        "code": null,
        "desc": "Toyama, Japan"
    },
    "Shillong": {
        "cityMap": {"GAU": "/m/03fxfy", "SHL": "/m/03cj6c"},
        "type": 3,
        "infoLists": ["GAU", "SHL"],
        "text": "/m/03cj6c",
        "code": null,
        "desc": "Shillong, Meghalaya, India"
    },
    "Surakarta (Solo)": {"type": 1, "code": "SOC"},
    "Chiang Rai": {
        "cityMap": {"CEI": "/m/01d9bn"},
        "type": 3,
        "infoLists": ["CEI"],
        "text": "/m/01d7bx",
        "code": null,
        "desc": "Mueang Chiang Rai, Thailand"
    },
    "Knoxville": {
        "cityMap": {"TYS": "/m/0_vn7"},
        "type": 3,
        "infoLists": ["TYS"],
        "text": "/m/0_vn7",
        "code": null,
        "desc": "Knoxville, Tennessee, USA"
    },
    "Wellington": {
        "cityMap": {"WLG": "/m/0853g"},
        "type": 3,
        "infoLists": ["WLG"],
        "text": "/m/0853g",
        "code": null,
        "desc": "Wellington, New Zealand"
    },
    "Mysore": {
        "cityMap": {"BLR": "/m/09c17", "MYQ": "/m/0j603"},
        "type": 3,
        "infoLists": ["BLR", "MYQ"],
        "text": "/m/0j603",
        "code": null,
        "desc": "Mysuru, Karnataka, India"
    },
    "Ibaraki": {
        "cityMap": {"IBR": "/m/03kdl3"},
        "type": 3,
        "infoLists": ["IBR"],
        "text": "/m/018qt8",
        "code": null,
        "desc": "Ibaraki, Japan"
    },
    "Peoria": {
        "cityMap": {"PIA": "/m/0sf9_"},
        "type": 3,
        "infoLists": ["PIA"],
        "text": "/m/0sf9_",
        "code": null,
        "desc": "Peoria, Illinois, USA"
    },
    "Memambetsu": {"type": 1, "code": "MMB"},
    "Kolhapur": {
        "cityMap": {"KLH": "/m/01xpn2", "PNQ": "/m/015y2q"},
        "type": 3,
        "infoLists": ["KLH", "PNQ"],
        "text": "/m/01xpn2",
        "code": null,
        "desc": "Kolhapur, Maharashtra, India"
    },
    "Bahrain": {
        "cityMap": {"BAH": "/m/0161c"},
        "type": 3,
        "infoLists": ["BAH"],
        "text": "/m/0161c",
        "code": null,
        "desc": "Bahrain"
    },
    "Padang": {
        "cityMap": {"PDG": "/m/04gv5c"},
        "type": 3,
        "infoLists": ["PDG"],
        "text": "/m/04gv5c",
        "code": null,
        "desc": "Padang, Indonesia"
    },
    "Minsk": {
        "cityMap": {"MSQ": "/m/0dlxj"},
        "type": 3,
        "infoLists": ["MSQ"],
        "text": "/m/0dlxj",
        "code": null,
        "desc": "Minsk, Belarus"
    },
    "Brasilia": {
        "cityMap": {"BSB": "/m/01hy_"},
        "type": 3,
        "infoLists": ["BSB"],
        "text": "/m/01hy_",
        "code": null,
        "desc": "Brasília, Brazil"
    },
    "Malang": {
        "cityMap": {"SUB": "/m/01f4xd", "MLG": "/m/04w8dn"},
        "type": 3,
        "infoLists": ["SUB", "MLG"],
        "text": "/m/04w8dn",
        "code": null,
        "desc": "Malang, Indonesia"
    },
    "Sao Luiz": {"type": 1, "code": "SLZ"},
    "Emerald": {
        "cityMap": {"EMD": "/m/02w3lg"},
        "type": 3,
        "infoLists": ["EMD"],
        "text": "/m/02w3lg",
        "code": null,
        "desc": "Emerald, Australia"
    },
    "Santa Cruz": {
        "cityMap": {"SJC": "/m/0f04v", "SFO": "/m/0d6lp"},
        "type": 3,
        "infoLists": ["SJC", "SFO"],
        "text": "/m/0l0mk",
        "code": null,
        "desc": "Santa Cruz, California, USA"
    },
    "Kuala Terengganu": {
        "cityMap": {"TGG": "/m/02vl0m"},
        "type": 3,
        "infoLists": ["TGG"],
        "text": "/m/02vl0m",
        "code": null,
        "desc": "Kuala Terengganu, Malaysia"
    },
    "Longyearbyen": {
        "cityMap": {"LYR": "/m/01xp01"},
        "type": 3,
        "infoLists": ["LYR"],
        "text": "/m/01xp01",
        "code": null,
        "desc": "Longyearbyen, Svalbard & Jan Mayen"
    },
    "Apia": {
        "cityMap": {"APW": "/m/0fnzs", "FGI": "/m/0fnzs"},
        "type": 3,
        "infoLists": ["APW", "FGI"],
        "text": "/m/0fnzs",
        "code": null,
        "desc": "Apia, Samoa"
    },
    "Shiraz": {
        "cityMap": {"SYZ": "/m/09wc5"},
        "type": 3,
        "infoLists": ["SYZ"],
        "text": "/m/09wc5",
        "code": null,
        "desc": "Shiraz, Iran"
    },
    "Batam": {
        "cityMap": {"BTH": "/m/035bjw"},
        "type": 3,
        "infoLists": ["BTH"],
        "text": "/m/035bjw",
        "code": null,
        "desc": "Batam, Indonesia"
    },
    "Lusaka": {
        "cityMap": {"LUN": "/m/0j3vl"},
        "type": 3,
        "infoLists": ["LUN"],
        "text": "/m/0j3vl",
        "code": null,
        "desc": "Lusaka, Zambia"
    },
    "Akita": {
        "cityMap": {"AXT": "/m/019649"},
        "type": 3,
        "infoLists": ["AXT"],
        "text": "/m/019649",
        "code": null,
        "desc": "Akita, Japan"
    },
    "Valledupar": {
        "cityMap": {"VUP": "/m/0315bq"},
        "type": 3,
        "infoLists": ["VUP"],
        "text": "/m/0315bq",
        "code": null,
        "desc": "Valledupar, Colombia"
    },
    "Tahiti": {
        "cityMap": {"PPT": "/m/0hb6g"},
        "type": 3,
        "infoLists": ["PPT"],
        "text": "/m/0hb6g",
        "code": null,
        "desc": "Tahiti, French Polynesia"
    },
    "Sofia": {
        "cityMap": {"SOF": "/m/0ftjx"},
        "type": 3,
        "infoLists": ["SOF"],
        "text": "/m/0ftjx",
        "code": null,
        "desc": "Sofia, Bulgaria"
    },
    "Thessaloniki": {
        "cityMap": {"SKG": "/m/0b2mc"},
        "type": 3,
        "infoLists": ["SKG"],
        "text": "/m/0b2mc",
        "code": null,
        "desc": "Thessaloniki, Greece"
    },
    "Redmond/Bend": {"type": 1, "code": "RDM"},
    "Abha": {
        "cityMap": {"AHB": "/m/07d_rb"},
        "type": 3,
        "infoLists": ["AHB"],
        "text": "/m/07d_rb",
        "code": null,
        "desc": "Abha Saudi Arabia"
    },
    "Mauritius": {
        "cityMap": {"MRU": "/g/112yfdt1m"},
        "type": 3,
        "infoLists": ["MRU"],
        "text": "/g/112yfdt1m",
        "code": null,
        "desc": "Mauritius Island, Mauritius"
    },
    "Churchill Falls": {
        "cityMap": {"ZUM": "/g/12q4sqj7j", "YWK": "/m/074dd5"},
        "type": 3,
        "infoLists": ["ZUM", "YWK"],
        "text": "/g/11c3w5pd93",
        "code": null,
        "desc": "Churchill Falls, Newfoundland and Labrador, Canada"
    },
    "Gander": {
        "cityMap": {"YQX": "/m/028n38"},
        "type": 3,
        "infoLists": ["YQX"],
        "text": "/m/028n38",
        "code": null,
        "desc": "Gander, Newfoundland and Labrador, Canada"
    },
    "Asuncion": {
        "cityMap": {"ASU": "/m/0fn_m"},
        "type": 3,
        "infoLists": ["ASU"],
        "text": "/m/0fn_m",
        "code": null,
        "desc": "Asunción, Paraguay"
    },
    "Tromso": {
        "cityMap": {"TOS": "/m/018bvl"},
        "type": 3,
        "infoLists": ["TOS"],
        "text": "/g/11dylqpf8",
        "code": null,
        "desc": "Tromsø, Norway"
    },
    "Poprad": {
        "cityMap": {"KRK": "/m/0491y", "KSC": "/m/01t4hj", "TAT": "/m/01z0t4"},
        "type": 3,
        "infoLists": ["KRK", "KSC", "TAT"],
        "text": "/m/01z0t4",
        "code": null,
        "desc": "Poprad, Slovakia"
    },
    "Punta Arenas": {
        "cityMap": {"PUQ": "/m/02n5vc"},
        "type": 3,
        "infoLists": ["PUQ"],
        "text": "/m/02n5vc",
        "code": null,
        "desc": "Punta Arenas, Chile"
    },
    "Ancona": {
        "cityMap": {"AOI": "/m/0dtyg", "BLQ": "/m/096g3"},
        "type": 3,
        "infoLists": ["AOI", "BLQ"],
        "text": "/m/0dtyg",
        "code": null,
        "desc": "Ancona, Italy"
    },
    "Chittagong": {
        "cityMap": {"CGP": "/m/021j38"},
        "type": 3,
        "infoLists": ["CGP"],
        "text": "/m/021j38",
        "code": null,
        "desc": "Chittagong, Bangladesh"
    },
    "Campbell River": {
        "cityMap": {"YBL": "/m/01wqbh", "YQQ": "/m/02b291"},
        "type": 3,
        "infoLists": ["YBL", "YQQ"],
        "text": "/m/01wqbh",
        "code": null,
        "desc": "Campbell River, British Columbia, Canada"
    },
    "Goiania": {
        "cityMap": {"GYN": "/g/11b6_k3v69"},
        "type": 3,
        "infoLists": ["GYN"],
        "text": "/g/11b6_k3v69",
        "code": null,
        "desc": "Goiânia, Brazil"
    },
    "Menorca": {
        "cityMap": {"MAH": "/m/0g87v"},
        "type": 3,
        "infoLists": ["MAH"],
        "text": "/m/0g87v",
        "code": null,
        "desc": "Menorca, Spain"
    },
    "Conakry": {
        "cityMap": {"CKY": "/m/0fn8p"},
        "type": 3,
        "infoLists": ["CKY"],
        "text": "/m/0fn8p",
        "code": null,
        "desc": "Conakry, Guinea"
    },
    "Dakar": {
        "cityMap": {"DSS": "/m/0c1xm"},
        "type": 3,
        "infoLists": ["DSS"],
        "text": "/m/0c1xm",
        "code": null,
        "desc": "Dakar, Senegal"
    },
    "Kishangarh": {
        "cityMap": {"JAI": "/m/016722", "KQH": "/m/08fg_3"},
        "type": 3,
        "infoLists": ["JAI", "KQH"],
        "text": "/m/08fg_3",
        "code": null,
        "desc": "Kishangarh, Rajasthan, India"
    },
    "Liverpool": {
        "cityMap": {"LPL": "/m/04lh6", "MAN": "/m/052bw"},
        "type": 3,
        "infoLists": ["LPL", "MAN"],
        "text": "/m/04lh6",
        "code": null,
        "desc": "Liverpool, United Kingdom"
    },
    "Szczecin": {
        "cityMap": {"SZZ": "/m/071g6", "BER": "/m/0156q"},
        "type": 3,
        "infoLists": ["SZZ", "BER"],
        "text": "/m/071g6",
        "code": null,
        "desc": "Szczecin, Poland"
    },
    "Skopje": {
        "cityMap": {"SKP": "/m/07bbc"},
        "type": 3,
        "infoLists": ["SKP"],
        "text": "/m/07bbc",
        "code": null,
        "desc": "Skopje, North Macedonia"
    },
    "Zakinthos Island": {"type": 1, "code": "ZTH"},
    "Bendigo": {
        "cityMap": {"MEL": "/m/0chgzm", "BXG": "/m/0gxbl"},
        "type": 3,
        "infoLists": ["MEL", "BXG"],
        "text": "/m/0gxbl",
        "code": null,
        "desc": "Bendigo, Australia"
    },
    "Uberlandia": {
        "cityMap": {"UDI": "/m/02wkdb"},
        "type": 3,
        "infoLists": ["UDI"],
        "text": "/m/02wkdb",
        "code": null,
        "desc": "Uberlândia, Brazil"
    },
    "Trieste": {
        "cityMap": {"TRS": "/m/0fjsl", "VCE": "/m/07_pf"},
        "type": 3,
        "infoLists": ["TRS", "VCE"],
        "text": "/m/0fjsl",
        "code": null,
        "desc": "Trieste, Italy"
    },
    "Rhodes": {
        "cityMap": {"RHO": "/m/07yfd0"},
        "type": 3,
        "infoLists": ["RHO"],
        "text": "/m/06ky_",
        "code": null,
        "desc": "Rhodes, Greece"
    },
    "Jinan": {
        "cityMap": {"TNA": "/m/01l3h7"},
        "type": 3,
        "infoLists": ["TNA"],
        "text": "/m/01l3h7",
        "code": null,
        "desc": "Jinan, China"
    },
    "Diu": {
        "cityMap": {"DIU": "/m/0h1fl2d"},
        "type": 3,
        "infoLists": ["DIU"],
        "text": "/m/0h1fl2d",
        "code": null,
        "desc": "Diu, Dadra and Nagar Haveli and Daman and Diu, India"
    },
    "Cuddapah": {"type": 1, "code": "CDP"},
    "Billund": {
        "cityMap": {"BLL": "/m/05b6m79"},
        "type": 3,
        "infoLists": ["BLL"],
        "text": "/m/05b6m79",
        "code": null,
        "desc": "Billund, Denmark"
    },
    "Gwangju": {
        "cityMap": {"ICN": "/m/0hsqf", "CJU": "/m/03m9sv", "KWJ": "/m/01vsj4"},
        "type": 3,
        "infoLists": ["ICN", "CJU", "KWJ"],
        "text": "/m/01vsj4",
        "code": null,
        "desc": "Gwangju, South Korea"
    },
    "Nevsehir": {
        "cityMap": {"NAV": "/m/08nnz6", "ASR": "/m/01k571"},
        "type": 3,
        "infoLists": ["NAV", "ASR"],
        "text": "/m/08nnz6",
        "code": null,
        "desc": "Nevşehir, Türkiye"
    },
    "Asturias": {
        "cityMap": {"OVD": "/m/044_01"},
        "type": 3,
        "infoLists": ["OVD"],
        "text": "/m/044_rs",
        "code": null,
        "desc": "Corvera de Asturias, Spain"
    },
    "Semarang": {
        "cityMap": {"SRG": "/m/0496mh"},
        "type": 3,
        "infoLists": ["SRG"],
        "text": "/m/0496mh",
        "code": null,
        "desc": "Semarang, Indonesia"
    },
    "Hervey Bay": {
        "cityMap": {"BNE": "/m/01b8jj", "HVB": "/m/02vz45"},
        "type": 3,
        "infoLists": ["BNE", "HVB"],
        "text": "/m/02vz45",
        "code": null,
        "desc": "Hervey Bay, Australia"
    },
    "Bratislava": {
        "cityMap": {"BTS": "/m/015g7", "VIE": "/m/0fhp9"},
        "type": 3,
        "infoLists": ["BTS", "VIE"],
        "text": "/m/015g7",
        "code": null,
        "desc": "Bratislava, Slovakia"
    },
    "Hat Yai": {
        "cityMap": {"HDY": "/m/02ft4x"},
        "type": 3,
        "infoLists": ["HDY"],
        "text": "/m/02ft4x",
        "code": null,
        "desc": "Hat Yai, Thailand"
    },
    "Pantnagar": {
        "cityMap": {"PGH": "/m/09wxkn"},
        "type": 3,
        "infoLists": ["PGH"],
        "text": "/m/09wxkn",
        "code": null,
        "desc": "Pantnagar, Uttarakhand, India"
    },
    "Ozamiz": {
        "cityMap": {"OZC": "/m/06pmyy"},
        "type": 3,
        "infoLists": ["OZC"],
        "text": "/m/06pmyy",
        "code": null,
        "desc": "Ozamiz City, Philippines"
    },
    "Broome": {
        "cityMap": {"BME": "/m/012q6n"},
        "type": 3,
        "infoLists": ["BME"],
        "text": "/m/012q6n",
        "code": null,
        "desc": "Broome, Australia"
    },
    "Butuan": {
        "cityMap": {"BXU": "/m/06bbcy"},
        "type": 3,
        "infoLists": ["BXU"],
        "text": "/m/06bbcy",
        "code": null,
        "desc": "Butuan City, Philippines"
    },
    "Minot": {
        "cityMap": {"MOT": "/m/0ys4f"},
        "type": 3,
        "infoLists": ["MOT"],
        "text": "/m/0ys4f",
        "code": null,
        "desc": "Minot, North Dakota, USA"
    },
    "Aswan": {
        "cityMap": {"ASW": "/m/0_38"},
        "type": 3,
        "infoLists": ["ASW"],
        "text": "/m/0_38",
        "code": null,
        "desc": "Aswan, Egypt"
    },
    "Tulum": {
        "cityMap": {"TUY": ""},
        "type": 3,
        "infoLists": ["TUY"],
        "text": "/m/09g8wmn",
        "code": null,
        "desc": "Tulum Municipality, Mexico"
    },
    "Sochi": {
        "cityMap": {"AER": "/m/0m465"},
        "type": 3,
        "infoLists": ["AER"],
        "text": "/m/0m465",
        "code": null,
        "desc": "Sochi, Russia"
    },
    "Banyuwangi": {
        "cityMap": {"BWX": "/m/0k0p28g"},
        "type": 3,
        "infoLists": ["BWX"],
        "text": "/m/0k0p28g",
        "code": null,
        "desc": "Banyuwangi, Indonesia"
    },
    "Nanning": {
        "cityMap": {"NNG": "/m/0259bz"},
        "type": 3,
        "infoLists": ["NNG"],
        "text": "/m/0259bz",
        "code": null,
        "desc": "Nanning, China"
    },
    "Hail": {
        "cityMap": {"HAS": "/m/07g1tg"},
        "type": 3,
        "infoLists": ["HAS"],
        "text": "/m/07g1tg",
        "code": null,
        "desc": "Hail Saudi Arabia"
    },
    "Bozeman": {
        "cityMap": {"BZN": "/m/0x1y7"},
        "type": 3,
        "infoLists": ["BZN"],
        "text": "/m/0x1y7",
        "code": null,
        "desc": "Bozeman, Montana, USA"
    },
    "Ubon Ratchathani": {
        "cityMap": {"UBP": "/m/01k46y"},
        "type": 3,
        "infoLists": ["UBP"],
        "text": "/m/02mbfq",
        "code": null,
        "desc": "Ubon Ratchathani, Thailand"
    },
    "Bandar Lampung": {
        "cityMap": {"TKG": "/m/05pcht"},
        "type": 3,
        "infoLists": ["TKG"],
        "text": "/m/05pcht",
        "code": null,
        "desc": "Bandar Lampung City, Indonesia"
    },
    "Petersburg": {
        "cityMap": {"PSG": "/m/01z1_zb", "WRG": "/m/01z23rx"},
        "type": 3,
        "infoLists": ["PSG", "WRG"],
        "text": "/m/01z1_zb",
        "code": null,
        "desc": "Petersburg, Alaska, USA"
    },
    "Harrisburg": {
        "cityMap": {"MDT": "/m/0fvzz", "BWI": "/m/094jv", "PHL": "/m/0dclg"},
        "type": 3,
        "infoLists": ["MDT", "BWI", "PHL"],
        "text": "/m/0fvzz",
        "code": null,
        "desc": "Harrisburg, Pennsylvania, USA"
    },
    "Medford": {
        "cityMap": {"MFR": "/m/0zdfp"},
        "type": 3,
        "infoLists": ["MFR"],
        "text": "/m/0zdfp",
        "code": null,
        "desc": "Medford, Oregon, USA"
    },
    "Mineralnye Vody": {
        "cityMap": {"MRV": "/m/051505"},
        "type": 3,
        "infoLists": ["MRV"],
        "text": "/m/051505",
        "code": null,
        "desc": "Mineralnye Vody, Russia"
    },
    "Al Ula": {"type": 1, "code": "ULH"},
    "Wroclaw": {
        "cityMap": {"WRO": "/m/0845b"},
        "type": 3,
        "infoLists": ["WRO"],
        "text": "/m/0845b",
        "code": null,
        "desc": "Wrocław, Poland"
    },
    "Lourdes/Tarbes": {
        "cityMap": {},
        "type": 1,
        "text": "/m/0dxt_4",
        "code": "LDE",
        "desc": "Tarbes–Lourdes–Pyrénées Airport"
    },
    "Palembang": {
        "cityMap": {"PLM": "/m/01c_92"},
        "type": 3,
        "infoLists": ["PLM"],
        "text": "/m/01c_92",
        "code": null,
        "desc": "Palembang, Indonesia"
    },
    "Koror": {
        "cityMap": {"ROR": "/m/0fnhy"},
        "type": 3,
        "infoLists": ["ROR"],
        "text": "/m/0fnhy",
        "code": null,
        "desc": "Koror, Palau"
    },
    "Stuttgart": {
        "cityMap": {"STR": "/m/0727_"},
        "type": 3,
        "infoLists": ["STR"],
        "text": "/m/0727_",
        "code": null,
        "desc": "Stuttgart, Germany"
    },
    "San Pedro": {
        "cityMap": {"SPR": "/m/01n23t"},
        "type": 3,
        "infoLists": ["SPR"],
        "text": "/m/01n23t",
        "code": null,
        "desc": "San Pedro, Belize"
    },
    "Erbil": {
        "cityMap": {"EBL": "/m/03n7br"},
        "type": 3,
        "infoLists": ["EBL"],
        "text": "/m/03n7br",
        "code": null,
        "desc": "Erbil, Iraq"
    },
    "Baghdad": {
        "cityMap": {"BGW": "/m/01fqm"},
        "type": 3,
        "infoLists": ["BGW"],
        "text": "/m/01fqm",
        "code": null,
        "desc": "Baghdad, Iraq"
    },
    "U-Tapao": {
        "cityMap": {},
        "type": 1,
        "text": "/m/04xwt7",
        "code": "UTP",
        "desc": "U-Tapao Rayong–Pattaya International Airport"
    },
    "Silchar": {
        "cityMap": {"IXS": "/m/05p9jh"},
        "type": 3,
        "infoLists": ["IXS"],
        "text": "/m/05p9jh",
        "code": null,
        "desc": "Silchar, Assam, India"
    },
    "Florianopolis": {
        "cityMap": {"FLN": "/g/11bc6xlppd"},
        "type": 3,
        "infoLists": ["FLN"],
        "text": "/g/11bc6xlppd",
        "code": null,
        "desc": "Florianópolis, Brazil"
    },
    "Carcassonne": {
        "cityMap": {"TLS": "/m/0cbhh", "CCF": "/m/0lvv8"},
        "type": 3,
        "infoLists": ["TLS", "CCF"],
        "text": "/m/0lvv8",
        "code": null,
        "desc": "Carcassonne, France"
    },
    "Heraklion": {
        "cityMap": {"HER": "/m/0g87b"},
        "type": 3,
        "infoLists": ["HER"],
        "text": "/m/0g87b",
        "code": null,
        "desc": "Heraklion, Greece"
    },
    "Salvador": {
        "cityMap": {"SSA": "/m/09wwlj", "AJU": "/m/01hy84"},
        "type": 3,
        "infoLists": ["SSA", "AJU"],
        "text": "/m/09wwlj",
        "code": null,
        "desc": "Salvador, Brazil"
    },
    "Omsk": {
        "cityMap": {"OMS": "/m/0gxgf"},
        "type": 3,
        "infoLists": ["OMS"],
        "text": "/m/0gxgf",
        "code": null,
        "desc": "Omsk, Russia"
    },
    "Lanzarote": {
        "cityMap": {"ACE": "/m/01s8wm"},
        "type": 3,
        "infoLists": ["ACE"],
        "text": "/m/01s8wm",
        "code": null,
        "desc": "Lanzarote, Spain"
    },
    "Asheville/Hendersonville": {"type": 1, "code": "AVL"},
    "Jiamusi": {
        "cityMap": {"JMU": "/m/0307vc"},
        "type": 3,
        "infoLists": ["JMU"],
        "text": "/m/0307vc",
        "code": null,
        "desc": "Jiamusi, China"
    },
    "Saipan": {
        "cityMap": {"SPN": "/m/01cfm5"},
        "type": 3,
        "infoLists": ["SPN"],
        "text": "/m/01cfm5",
        "code": null,
        "desc": "Saipan, Northern Mariana Islands"
    },
    "St Vincent": {
        "cityMap": {"SVD": "/m/0l_3y"},
        "type": 3,
        "infoLists": ["SVD"],
        "text": "/m/06s6l",
        "code": null,
        "desc": "Saint Vincent and the Grenadines"
    },
    "Bima": {
        "cityMap": {"BMU": "/m/02qc7w3"},
        "type": 3,
        "infoLists": ["BMU"],
        "text": "/m/02qc7w3",
        "code": null,
        "desc": "Bima, Indonesia"
    },
    "Dong Hoi": {"cityMap": {}, "type": 1, "text": "/m/0g11nr", "code": "VDH", "desc": "Dong Hoi Airport"},
    "Loreto": {
        "cityMap": {"LTO": "/m/04x5l8"},
        "type": 3,
        "infoLists": ["LTO"],
        "text": "/m/04x5l8",
        "code": null,
        "desc": "Loreto, Mexico"
    },
    "Milwaukee": {
        "cityMap": {"MKE": "/m/0dyl9", "ORD": "/m/01_d4"},
        "type": 3,
        "infoLists": ["MKE", "ORD"],
        "text": "/m/0dyl9",
        "code": null,
        "desc": "Milwaukee, Wisconsin, USA"
    },
    "Addis Ababa": {
        "cityMap": {"ADD": "/m/0dttf"},
        "type": 3,
        "infoLists": ["ADD"],
        "text": "/m/0dttf",
        "code": null,
        "desc": "Addis Ababa, Ethiopia"
    },
    "Esfahan": {
        "cityMap": {"IFN": "/m/01gk3x", "IKA": "/m/0ftlx"},
        "type": 3,
        "infoLists": ["IFN", "IKA"],
        "text": "/g/1224nhs3",
        "code": null,
        "desc": "Khane Esfahan, Iran"
    },
    "Pierre": {"cityMap": {}, "type": 1, "text": "/m/06qqw5", "code": "PIR", "desc": "Pierre Regional Airport (PIR)"},
    "Posadas": {
        "cityMap": {"PSS": "/m/06gqs2"},
        "type": 3,
        "infoLists": ["PSS"],
        "text": "/m/06gqs2",
        "code": null,
        "desc": "Posadas, Argentina"
    },
    "Biarritz": {
        "cityMap": {"BIQ": "/m/01h3tl"},
        "type": 3,
        "infoLists": ["BIQ"],
        "text": "/m/01h3tl",
        "code": null,
        "desc": "Biarritz, France"
    },
    "Panglao": {
        "cityMap": {"TAG": "/m/06lgxt", "CEB": "/m/01p_ly"},
        "type": 3,
        "infoLists": ["TAG", "CEB"],
        "text": "/m/06lgxt",
        "code": null,
        "desc": "Panglao, Philippines"
    },
    "Vigo": {
        "cityMap": {"VGO": "/m/026kzs", "SCQ": "/m/06wr9"},
        "type": 3,
        "infoLists": ["VGO", "SCQ"],
        "text": "/m/026kzs",
        "code": null,
        "desc": "Vigo, Spain"
    },
    "Hot Springs": {
        "cityMap": {"LIT": "/m/0ftvg", "HOT": "/m/0qt85"},
        "type": 3,
        "infoLists": ["LIT", "HOT"],
        "text": "/m/0qt85",
        "code": null,
        "desc": "Hot Springs, Arkansas, USA"
    },
    "Muenster/Osnabrueck": {"type": 1, "code": "FMO"},
    "Fortaleza": {
        "cityMap": {"FOR": "/m/02_9n"},
        "type": 3,
        "infoLists": ["FOR"],
        "text": "/m/02_9n",
        "code": null,
        "desc": "Fortaleza, Brazil"
    },
    "Dalaman": {
        "cityMap": {"DLM": "/m/07s55q"},
        "type": 3,
        "infoLists": ["DLM"],
        "text": "/m/07s55q",
        "code": null,
        "desc": "Dalaman, Türkiye"
    },
    "Griffith": {
        "cityMap": {"GFF": "/m/0497ls"},
        "type": 3,
        "infoLists": ["GFF"],
        "text": "/m/0497ls",
        "code": null,
        "desc": "Griffith, Australia"
    },
    "Saga": {"cityMap": {}, "type": 1, "text": "/m/02plll5", "code": "HSG", "desc": "Saga International Airport"},
    "Campina Grande": {
        "cityMap": {"CPV": "/m/01p7c6", "JPA": "/m/01hy9d"},
        "type": 3,
        "infoLists": ["CPV", "JPA"],
        "text": "/m/01p7c6",
        "code": null,
        "desc": "Campina Grande, Brazil"
    },
    "Cauayan": {
        "cityMap": {"CYZ": "/m/06k0qy"},
        "type": 3,
        "infoLists": ["CYZ"],
        "text": "/m/06k0qy",
        "code": null,
        "desc": "Cauayan City, Philippines"
    },
    "Podgorica": {
        "cityMap": {"TGD": "/m/0174pr"},
        "type": 3,
        "infoLists": ["TGD"],
        "text": "/m/0174pr",
        "code": null,
        "desc": "Podgorica, Montenegro"
    },
    "Poznan": {
        "cityMap": {"POZ": "/m/05xnv"},
        "type": 3,
        "infoLists": ["POZ"],
        "text": "/m/05xnv",
        "code": null,
        "desc": "Poznań, Poland"
    },
    "Sibiu": {
        "cityMap": {"SBZ": "/m/020blz"},
        "type": 3,
        "infoLists": ["SBZ"],
        "text": "/m/020blz",
        "code": null,
        "desc": "Sibiu, Romania"
    },
    "Jazan": {
        "cityMap": {"GIZ": "/m/0659tm"},
        "type": 3,
        "infoLists": ["GIZ"],
        "text": "/m/0659tm",
        "code": null,
        "desc": "Jazan Saudi Arabia"
    },
    "Bejaia": {
        "cityMap": {"ALG": "/m/0rtv", "BJA": "/m/05s7ny"},
        "type": 3,
        "infoLists": ["ALG", "BJA"],
        "text": "/m/05s7ny",
        "code": null,
        "desc": "Béjaïa, Algeria"
    },
    "Dayton": {
        "cityMap": {"DAY": "/m/029cr"},
        "type": 3,
        "infoLists": ["DAY"],
        "text": "/m/029cr",
        "code": null,
        "desc": "Dayton, Ohio, USA"
    },
    "Cotonou": {
        "cityMap": {"COO": "/m/0fn95"},
        "type": 3,
        "infoLists": ["COO"],
        "text": "/m/0fn95",
        "code": null,
        "desc": "Cotonou, Benin"
    },
    "Newquay": {
        "cityMap": {"NQY": "/m/0hc84", "BRS": "/m/095l0"},
        "type": 3,
        "infoLists": ["NQY", "BRS"],
        "text": "/m/0hc84",
        "code": null,
        "desc": "Newquay, United Kingdom"
    },
    "Sharm el-Sheikh": {
        "cityMap": {"SSH": "/m/0266kj"},
        "type": 3,
        "infoLists": ["SSH"],
        "text": "/m/0266kj",
        "code": null,
        "desc": "Sharm El-Sheikh, Egypt"
    },
    "Puerto Escondido": {
        "cityMap": {"PXM": "/m/03m8wc"},
        "type": 3,
        "infoLists": ["PXM"],
        "text": "/m/03m8wc",
        "code": null,
        "desc": "Puerto Escondido, Mexico"
    },
    "Salzburg": {
        "cityMap": {"SZG": "/m/0b1mf", "MUC": "/m/02h6_6p"},
        "type": 3,
        "infoLists": ["SZG", "MUC"],
        "text": "/m/0b1mf",
        "code": null,
        "desc": "Salzburg, Austria"
    },
    "Bishkek": {
        "cityMap": {"FRU": "/m/01g9_"},
        "type": 3,
        "infoLists": ["FRU"],
        "text": "/m/01g9_",
        "code": null,
        "desc": "Bishkek, Kyrgyzstan"
    },
    "Kazan": {
        "cityMap": {"KZN": "/m/01cr28"},
        "type": 3,
        "infoLists": ["KZN"],
        "text": "/m/01cr28",
        "code": null,
        "desc": "Kazan, Russia"
    },
    "Lijiang": {
        "cityMap": {"LJG": "/m/02fq4k"},
        "type": 3,
        "infoLists": ["LJG"],
        "text": "/m/02fq4k",
        "code": null,
        "desc": "Lijiang, China"
    },
    "Manzanillo": {
        "cityMap": {"GDL": "/m/0jp26", "ZLO": "/m/01gn2t"},
        "type": 3,
        "infoLists": ["GDL", "ZLO"],
        "text": "/m/01gn2t",
        "code": null,
        "desc": "Manzanillo, Mexico"
    },
    "Williams Lake": {
        "cityMap": {"YWL": "/m/051m3f"},
        "type": 3,
        "infoLists": ["YWL"],
        "text": "/m/051m3f",
        "code": null,
        "desc": "Williams Lake, British Columbia, Canada"
    },
    "Batumi": {
        "cityMap": {"BUS": "/m/0c26g"},
        "type": 3,
        "infoLists": ["BUS"],
        "text": "/m/0c26g",
        "code": null,
        "desc": "Batumi, Georgia"
    },
    "Perugia": {
        "cityMap": {"FCO": "/m/06c62", "PEG": "/m/0dly0"},
        "type": 3,
        "infoLists": ["FCO", "PEG"],
        "text": "/m/0dly0",
        "code": null,
        "desc": "Perugia, Italy"
    },
    "Hua Hin": {
        "cityMap": {"BKK": "/m/0fn2g", "DMK": "/m/0fn2g", "HHQ": "/m/02fvql"},
        "type": 3,
        "infoLists": ["BKK", "DMK", "HHQ"],
        "text": "/m/02fvql",
        "code": null,
        "desc": "Hua Hin District, Thailand"
    },
    "Nuevo Laredo": {
        "cityMap": {"MTY": "/m/0b2h3", "NLD": "/m/051f5x"},
        "type": 3,
        "infoLists": ["MTY", "NLD"],
        "text": "/m/051f5x",
        "code": null,
        "desc": "Nuevo Laredo, Mexico"
    },
    "Cuenca": {
        "cityMap": {"CUE": "/m/02rvjw", "GYE": "/m/01fknt"},
        "type": 3,
        "infoLists": ["CUE", "GYE"],
        "text": "/m/02rvjw",
        "code": null,
        "desc": "Cuenca, Ecuador"
    },
    "Sihanoukville": {
        "cityMap": {"KOS": "/m/02h2bd"},
        "type": 3,
        "infoLists": ["KOS"],
        "text": "/m/02h2bd",
        "code": null,
        "desc": "Sihanoukville, Cambodia"
    },
    "Antigua": {
        "cityMap": {"ANU": "/m/069pbv"},
        "type": 3,
        "infoLists": ["ANU"],
        "text": "/m/0l3h",
        "code": null,
        "desc": "Antigua and Barbuda"
    },
    "Balikpapan": {
        "cityMap": {"BPN": "/m/02lb6x"},
        "type": 3,
        "infoLists": ["BPN"],
        "text": "/m/02lb6x",
        "code": null,
        "desc": "Balikpapan, Indonesia"
    },
    "Bournemouth": {
        "cityMap": {"LHR": "/m/04jpl", "BOH": "/m/0161jj"},
        "type": 3,
        "infoLists": ["LHR", "BOH"],
        "text": "/m/0161jj",
        "code": null,
        "desc": "Bournemouth, United Kingdom"
    },
    "Port Moresby": {
        "cityMap": {"POM": "/m/0fs0v"},
        "type": 3,
        "infoLists": ["POM"],
        "text": "/m/0fs0v",
        "code": null,
        "desc": "Port Moresby, Papua New Guinea"
    },
    "Mount Hagen": {
        "cityMap": {"HGU": "/m/06dqm9"},
        "type": 3,
        "infoLists": ["HGU"],
        "text": "/m/06dqm9",
        "code": null,
        "desc": "Mount Hagen, Papua New Guinea"
    },
    "Quetta": {
        "cityMap": {"UET": "/m/0n84k"},
        "type": 3,
        "infoLists": ["UET"],
        "text": "/m/0n84k",
        "code": null,
        "desc": "Quetta, Pakistan"
    },
    "Piura": {
        "cityMap": {"PIU": "/m/02wpwv"},
        "type": 3,
        "infoLists": ["PIU"],
        "text": "/m/02wpwv",
        "code": null,
        "desc": "Piura, Peru"
    },
    "Caye Caulker": {
        "cityMap": {"CUK": "/m/06htyj", "SPR": "/m/01n23t"},
        "type": 3,
        "infoLists": ["CUK", "SPR"],
        "text": "/m/06htyj",
        "code": null,
        "desc": "Caye Caulker, Belize"
    },
    "Phitsanulok": {
        "cityMap": {"PHS": "/m/047gmkf"},
        "type": 3,
        "infoLists": ["PHS"],
        "text": "/m/047gmkf",
        "code": null,
        "desc": "Phitsanulok, Thailand"
    },
    "Tacna": {
        "cityMap": {"TCQ": "/m/02wq3y"},
        "type": 3,
        "infoLists": ["TCQ"],
        "text": "/m/02wq3y",
        "code": null,
        "desc": "Tacna, Peru"
    },
    "Cuiaba": {
        "cityMap": {"CGB": "/m/033yhk"},
        "type": 3,
        "infoLists": ["CGB"],
        "text": "/m/033yhk",
        "code": null,
        "desc": "Cuiabá, Brazil"
    },
    "Manta": {
        "cityMap": {"MEC": "/m/033d7l", "GYE": "/m/01fknt"},
        "type": 3,
        "infoLists": ["MEC", "GYE"],
        "text": "/m/033d7l",
        "code": null,
        "desc": "Manta, Ecuador"
    },
    "San Luis Potosi": {
        "cityMap": {"SLP": "/m/01ccl3"},
        "type": 3,
        "infoLists": ["SLP"],
        "text": "/m/01ccl3",
        "code": null,
        "desc": "San Luis Potosi, Mexico"
    },
    "Jackson": {
        "cityMap": {"JAX": "/m/0ggh3"},
        "type": 3,
        "infoLists": ["JAX"],
        "text": "/m/0ggh3",
        "code": null,
        "desc": "Jacksonville, Florida, USA"
    },
    "Silver City": {
        "cityMap": {"TUS": "/m/0fr0t", "ELP": "/m/0100mt", "SVC": "/m/0xv5p"},
        "type": 3,
        "infoLists": ["TUS", "ELP", "SVC"],
        "text": "/m/0xv5p",
        "code": null,
        "desc": "Silver City, New Mexico, USA"
    },
    "Great Falls": {
        "cityMap": {"GTF": "/m/0x1jc"},
        "type": 3,
        "infoLists": ["GTF"],
        "text": "/m/0x1jc",
        "code": null,
        "desc": "Great Falls, Montana, USA"
    },
    "Banda Aceh": {
        "cityMap": {"BTJ": "/m/04t2vj"},
        "type": 3,
        "infoLists": ["BTJ"],
        "text": "/m/04t2vj",
        "code": null,
        "desc": "Banda Aceh, Indonesia"
    },
    "Inverness": {
        "cityMap": {"INV": "/m/012d9h", "EDI": "/m/02m77"},
        "type": 3,
        "infoLists": ["INV", "EDI"],
        "text": "/m/012d9h",
        "code": null,
        "desc": "Inverness, United Kingdom"
    },
    "Santiago de Compostela": {
        "cityMap": {"SCQ": "/m/06wr9"},
        "type": 3,
        "infoLists": ["SCQ"],
        "text": "/m/06wr9",
        "code": null,
        "desc": "Santiago de Compostela, Spain"
    },
    "Changchun": {
        "cityMap": {"CGQ": "/m/01l3md"},
        "type": 3,
        "infoLists": ["CGQ"],
        "text": "/m/01l3md",
        "code": null,
        "desc": "Changchun, China"
    },
    "Bristol/Johnson/Kingsport": {"type": 1, "code": "TRI"},
    "Lamezia Terme": {
        "cityMap": {"SUF": "/m/0cl15k"},
        "type": 3,
        "infoLists": ["SUF"],
        "text": "/m/0cl15k",
        "code": null,
        "desc": "Lamezia Terme, Italy"
    },
    "Zacatecas": {
        "cityMap": {"ZCL": "/m/0jmdv"},
        "type": 3,
        "infoLists": ["ZCL"],
        "text": "/g/1ywqg0v2p",
        "code": null,
        "desc": "Zacatecas, Mexico"
    },
    "Rzeszow": {
        "cityMap": {"RZE": "/m/0jx2v", "KRK": "/m/0491y"},
        "type": 3,
        "infoLists": ["RZE", "KRK"],
        "text": "/m/0jx2v",
        "code": null,
        "desc": "Rzeszów, Poland"
    },
    "Basco": {
        "cityMap": {"BSO": "/m/01p0c0"},
        "type": 3,
        "infoLists": ["BSO"],
        "text": "/m/01p0c0",
        "code": null,
        "desc": "Basco, Philippines"
    },
    "Torreon": {
        "cityMap": {"TRC": "/m/01bv1l"},
        "type": 3,
        "infoLists": ["TRC"],
        "text": "/m/01bv1l",
        "code": null,
        "desc": "Torreón, Mexico"
    },
    "Tlemcen": {
        "cityMap": {"ORN": "/m/012gg6", "TLM": "/m/02kfnm"},
        "type": 3,
        "infoLists": ["ORN", "TLM"],
        "text": "/m/02kfnm",
        "code": null,
        "desc": "Tlemcen, Algeria"
    },
    "Limoges": {
        "cityMap": {"TLS": "/m/0cbhh", "LIG": "/m/0180yl", "BOD": "/m/01b85", "ORY": "/m/05qtj"},
        "type": 3,
        "infoLists": ["TLS", "LIG", "BOD", "ORY"],
        "text": "/m/0180yl",
        "code": null,
        "desc": "Limoges, France"
    },
    "Yanbu al Bahr": {"type": 1, "code": "YNB"},
    "A Coruna": {
        "cityMap": {"LCG": "/m/02hvjy", "SCQ": "/m/06wr9"},
        "type": 3,
        "infoLists": ["LCG", "SCQ"],
        "text": "/m/02hvjy",
        "code": null,
        "desc": "A Coruña, Spain"
    },
    "Maceio": {
        "cityMap": {"MCZ": "/m/03dz6h"},
        "type": 3,
        "infoLists": ["MCZ"],
        "text": "/m/03dz6h",
        "code": null,
        "desc": "Maceió, Brazil"
    },
    "Acapulco": {
        "cityMap": {"ACA": "/m/0p_f"},
        "type": 3,
        "infoLists": ["ACA"],
        "text": "/m/0p_f",
        "code": null,
        "desc": "Acapulco, Mexico"
    },
    "Juneau": {
        "cityMap": {"JNU": "/m/0l_q9"},
        "type": 3,
        "infoLists": ["JNU"],
        "text": "/m/0l_q9",
        "code": null,
        "desc": "Juneau, Alaska, USA"
    },
    "Bora Bora": {
        "cityMap": {"BOB": "/m/02j_kj", "RFP": "/m/039n10", "HUH": "/m/039c2m"},
        "type": 3,
        "infoLists": ["BOB", "RFP", "HUH"],
        "text": "/m/02j_kj",
        "code": null,
        "desc": "Bora Bora, French Polynesia"
    },
    "Uruapan": {
        "cityMap": {"UPN": "/m/05xr63", "GDL": "/m/0jp26"},
        "type": 3,
        "infoLists": ["UPN", "GDL"],
        "text": "/m/05xr63",
        "code": null,
        "desc": "Uruapan, Mexico"
    },
    "Bergerac": {
        "cityMap": {"BOD": "/m/01b85", "EGC": "/m/05836w", "BVE": "/m/04bjfv"},
        "type": 3,
        "infoLists": ["BOD", "EGC", "BVE"],
        "text": "/m/05836w",
        "code": null,
        "desc": "Bergerac, France"
    },
    "Suceava": {
        "cityMap": {"SCV": "/m/021pvg"},
        "type": 3,
        "infoLists": ["SCV"],
        "text": "/m/021pvg",
        "code": null,
        "desc": "Suceava, Romania"
    },
    "Banjul": {
        "cityMap": {"BJL": "/m/0j3wt"},
        "type": 3,
        "infoLists": ["BJL"],
        "text": "/m/0j3wt",
        "code": null,
        "desc": "Banjul, Gambia"
    },
    "San Carlos Bariloche": {
        "cityMap": {"BRC": "/m/0375p9"},
        "type": 3,
        "infoLists": ["BRC"],
        "text": "/m/0375p9",
        "code": null,
        "desc": "San Carlos de Bariloche, Argentina"
    },
    "Windsor": {
        "cityMap": {"YQG": "/m/0843m", "DTW": "/m/02dtg"},
        "type": 3,
        "infoLists": ["YQG", "DTW"],
        "text": "/m/0843m",
        "code": null,
        "desc": "Windsor, Ontario, Canada"
    },
    "Pakse": {
        "cityMap": {"PKZ": "/m/01c__w"},
        "type": 3,
        "infoLists": ["PKZ"],
        "text": "/m/01c__w",
        "code": null,
        "desc": "Pakse, Laos"
    },
    "Villahermosa": {
        "cityMap": {"VSA": "/m/01bktn"},
        "type": 3,
        "infoLists": ["VSA"],
        "text": "/m/01bktn",
        "code": null,
        "desc": "Villahermosa, Mexico"
    },
    "Lahad Datu": {
        "cityMap": {"TWU": "/m/05rw96", "LDU": "/m/05rw10"},
        "type": 3,
        "infoLists": ["TWU", "LDU"],
        "text": "/m/05rw10",
        "code": null,
        "desc": "Lahad Datu, Malaysia"
    },
    "Tambolaka": {
        "cityMap": {"TMC": "/m/0n45tqp"},
        "type": 3,
        "infoLists": ["TMC"],
        "text": "/m/0n45tqp",
        "code": null,
        "desc": "Kota Tambolaka, Indonesia"
    },
    "Dili": {
        "cityMap": {"DIL": "/m/0d3zc"},
        "type": 3,
        "infoLists": ["DIL"],
        "text": "/m/0d3zc",
        "code": null,
        "desc": "Dili, Timor-Leste"
    },
    "Perpignan": {
        "cityMap": {"PGF": "/m/09nkq", "BCN": "/m/01f62"},
        "type": 3,
        "infoLists": ["PGF", "BCN"],
        "text": "/m/09nkq",
        "code": null,
        "desc": "Perpignan, France"
    },
    "Jorhat": {
        "cityMap": {"JRH": "/m/05p9c7", "GAU": "/m/03fxfy"},
        "type": 3,
        "infoLists": ["JRH", "GAU"],
        "text": "/m/05p9c7",
        "code": null,
        "desc": "Jorhat, Assam, India"
    },
    "Gran Canaria": {
        "cityMap": {"LPA": "/m/015rz7"},
        "type": 3,
        "infoLists": ["LPA"],
        "text": "/m/01n91d",
        "code": null,
        "desc": "Gran Canaria, Spain"
    },
    "Porto Alegre": {
        "cityMap": {"POA": "/m/017575"},
        "type": 3,
        "infoLists": ["POA"],
        "text": "/m/017575",
        "code": null,
        "desc": "Porto Alegre, Brazil"
    },
    "Trabzon": {
        "cityMap": {"TZX": "/m/0gxwg"},
        "type": 3,
        "infoLists": ["TZX"],
        "text": "/m/0gxwg",
        "code": null,
        "desc": "Trabzon, Türkiye"
    },
    "Beziers": {
        "cityMap": {"BCN": "/m/01f62", "MRS": "/m/0jdtt", "TLS": "/m/0cbhh", "BZR": "/m/01n0b1"},
        "type": 3,
        "infoLists": ["BCN", "MRS", "TLS", "BZR"],
        "text": "/m/01n0b1",
        "code": null,
        "desc": "Béziers, France"
    },
    "Kapalua": {
        "cityMap": {"OGG": "/m/0s0gz", "JHM": "/m/0s0hb"},
        "type": 3,
        "infoLists": ["OGG", "JHM"],
        "text": "/m/0s0hb",
        "code": null,
        "desc": "Kapalua, Hawaii, USA"
    },
    "Sarajevo": {
        "cityMap": {"SJJ": "/m/06n8j"},
        "type": 3,
        "infoLists": ["SJJ"],
        "text": "/m/06n8j",
        "code": null,
        "desc": "Sarajevo, Bosnia & Herzegovina"
    },
    "Aktobe": {
        "cityMap": {"AKX": "/m/03wyr5"},
        "type": 3,
        "infoLists": ["AKX"],
        "text": "/m/03wyr5",
        "code": null,
        "desc": "Aktobe, Kazakhstan"
    },
    "Grand Rapids": {
        "cityMap": {"GRR": "/m/0v9qg"},
        "type": 3,
        "infoLists": ["GRR"],
        "text": "/m/0v9qg",
        "code": null,
        "desc": "Grand Rapids, Michigan, USA"
    },
    "Bremen": {
        "cityMap": {"BRE": "/m/017w_", "HAM": "/m/03hrz", "HAJ": "/m/03pbf"},
        "type": 3,
        "infoLists": ["BRE", "HAM", "HAJ"],
        "text": "/m/017w_",
        "code": null,
        "desc": "Bremen, Germany"
    },
    "Macon": {
        "cityMap": {"ATL": "/m/013yq", "MCN": "/m/0rt80"},
        "type": 3,
        "infoLists": ["ATL", "MCN"],
        "text": "/m/0rt80",
        "code": null,
        "desc": "Macon, Georgia, USA"
    },
    "Learmonth": {
        "cityMap": {"LEA": "/m/01pfgj"},
        "type": 3,
        "infoLists": ["LEA"],
        "text": "/g/1tdnt9b7",
        "code": null,
        "desc": "Learmonth, Australia"
    },
    "Plattsburgh": {
        "cityMap": {"PBG": "/m/01mbnb"},
        "type": 3,
        "infoLists": ["PBG"],
        "text": "/m/01mbnb",
        "code": null,
        "desc": "Plattsburgh, New York, USA"
    },
    "Kirkenes": {
        "cityMap": {"KKN": "/m/018d9w"},
        "type": 3,
        "infoLists": ["KKN"],
        "text": "/m/018d9w",
        "code": null,
        "desc": "Kirkenes, Norway"
    },
    "Nan": {
        "cityMap": {"DAD": "/m/026yqf"},
        "type": 3,
        "infoLists": ["DAD"],
        "text": "/m/026yqf",
        "code": null,
        "desc": "Da Nang, Vietnam"
    },
    "Puerto Maldonado": {
        "cityMap": {"PEM": "/m/05gvkg"},
        "type": 3,
        "infoLists": ["PEM"],
        "text": "/m/05gvkg",
        "code": null,
        "desc": "Puerto Maldonado, Peru"
    },
    "Gassim": {"type": 1, "code": "ELQ"},
    "Girona": {
        "cityMap": {"BCN": "/m/01f62", "GRO": "/m/0g7wz"},
        "type": 3,
        "infoLists": ["BCN", "GRO"],
        "text": "/m/0g7wz",
        "code": null,
        "desc": "Girona, Spain"
    },
    "Limon": {
        "cityMap": {"SJO": "/m/01g3b2", "LIO": "/m/0130ysp0"},
        "type": 3,
        "infoLists": ["SJO", "LIO"],
        "text": "/m/0130ysp0",
        "code": null,
        "desc": "Limon, Costa Rica"
    },
    "Rosario": {
        "cityMap": {"ROS": "/m/02tb17", "AEP": "/m/01ly5m"},
        "type": 3,
        "infoLists": ["ROS", "AEP"],
        "text": "/m/02tb17",
        "code": null,
        "desc": "Rosario, Argentina"
    },
    "Fairbanks": {
        "cityMap": {"FAI": "/m/0qf5p"},
        "type": 3,
        "infoLists": ["FAI"],
        "text": "/m/0qf5p",
        "code": null,
        "desc": "Fairbanks, Alaska, USA"
    },
    "Aberdeen": {
        "cityMap": {"ABZ": "/m/0rng"},
        "type": 3,
        "infoLists": ["ABZ"],
        "text": "/m/0rng",
        "code": null,
        "desc": "Aberdeen, United Kingdom"
    },
    "Hermosillo": {
        "cityMap": {"HMO": "/m/012thc"},
        "type": 3,
        "infoLists": ["HMO"],
        "text": "/m/012thc",
        "code": null,
        "desc": "Hermosillo, Mexico"
    },
    "Trang": {
        "cityMap": {"TST": "/m/02gpy4"},
        "type": 3,
        "infoLists": ["TST"],
        "text": "/m/01bk6y",
        "code": null,
        "desc": "Trang, Thailand"
    },
    "Raiatea Island": {"type": 1, "code": "RFP"},
    "Terceira": {
        "cityMap": {"TER": "/m/031_r6"},
        "type": 3,
        "infoLists": ["TER"],
        "text": "/m/031_r6",
        "code": null,
        "desc": "Terceira Island, Portugal"
    },
    "Cotabato": {
        "cityMap": {"CBO": "/m/01rnc8"},
        "type": 3,
        "infoLists": ["CBO"],
        "text": "/m/01rnc8",
        "code": null,
        "desc": "Cotabato City, Philippines"
    },
    "Kerry": {
        "cityMap": {"KIR": "/m/0m_w6", "ORK": "/m/0clz7", "SNN": "/m/02lpw5"},
        "type": 3,
        "infoLists": ["KIR", "ORK", "SNN"],
        "text": "/m/0m_w6",
        "code": null,
        "desc": "Kerry, Ireland"
    },
    "Ostrava": {
        "cityMap": {"PRG": "/m/05ywg", "OSR": "/m/02cnsv"},
        "type": 3,
        "infoLists": ["PRG", "OSR"],
        "text": "/m/02cnsv",
        "code": null,
        "desc": "Ostrava, Czechia"
    },
    "Ipatinga": {
        "cityMap": {"IPN": "/m/08fpfd"},
        "type": 3,
        "infoLists": ["IPN"],
        "text": "/m/08fpfd",
        "code": null,
        "desc": "Ipatinga, Brazil"
    },
    "Tarapoto": {
        "cityMap": {"TPP": "/m/09k57f"},
        "type": 3,
        "infoLists": ["TPP"],
        "text": "/m/09k57f",
        "code": null,
        "desc": "Tarapoto, Peru"
    },
    "Santa Barbara": {
        "cityMap": {"LAX": "/m/030qb3t", "SBA": "/m/0r62v"},
        "type": 3,
        "infoLists": ["LAX", "SBA"],
        "text": "/m/0r62v",
        "code": null,
        "desc": "Santa Barbara, California, USA"
    },
    "Xining": {
        "cityMap": {"XNN": "/m/02j8c4"},
        "type": 3,
        "infoLists": ["XNN"],
        "text": "/m/02j8c4",
        "code": null,
        "desc": "Xining, China"
    },
    "Les Cayes": {
        "cityMap": {"CYA": "/m/09dbn0"},
        "type": 3,
        "infoLists": ["CYA"],
        "text": "/m/09dbn0",
        "code": null,
        "desc": "Les Cayes, Haiti"
    },
    "Oran": {
        "cityMap": {"ORN": "/m/012gg6"},
        "type": 3,
        "infoLists": ["ORN"],
        "text": "/m/012gg6",
        "code": null,
        "desc": "Oran, Algeria"
    },
    "Gaziantep": {
        "cityMap": {"GZT": "/m/02q_g0"},
        "type": 3,
        "infoLists": ["GZT"],
        "text": "/m/02q_g0",
        "code": null,
        "desc": "Gaziantep, Türkiye"
    },
    "Zadar": {
        "cityMap": {"ZAD": "/m/01qqt8"},
        "type": 3,
        "infoLists": ["ZAD"],
        "text": "/m/01qqt8",
        "code": null,
        "desc": "Zadar, Croatia"
    },
    "Tamky": {"type": 1, "code": "VCL"},
    "Paramaribo": {
        "cityMap": {"PBM": "/m/0fr_v"},
        "type": 3,
        "infoLists": ["PBM"],
        "text": "/m/0fr_v",
        "code": null,
        "desc": "Paramaribo, Suriname"
    },
    "Lille": {
        "cityMap": {"LIL": "/m/0d8r8", "CDG": "/m/05qtj"},
        "type": 3,
        "infoLists": ["LIL", "CDG"],
        "text": "/m/0d8r8",
        "code": null,
        "desc": "Lille, France"
    },
    "Cedar Rapids": {
        "cityMap": {"CID": "/m/0t0n5"},
        "type": 3,
        "infoLists": ["CID"],
        "text": "/m/0t0n5",
        "code": null,
        "desc": "Cedar Rapids, Iowa, USA"
    },
    "Granada": {
        "cityMap": {"GRX": "/m/09jq0", "AGP": "/m/01978d"},
        "type": 3,
        "infoLists": ["GRX", "AGP"],
        "text": "/m/09jq0",
        "code": null,
        "desc": "Granada, Spain"
    },
    "Harare": {
        "cityMap": {"HRE": "/m/0fngf"},
        "type": 3,
        "infoLists": ["HRE"],
        "text": "/m/0fngf",
        "code": null,
        "desc": "Harare, Zimbabwe"
    },
    "Denizli": {
        "cityMap": {"DNZ": "/m/039rrn"},
        "type": 3,
        "infoLists": ["DNZ"],
        "text": "/m/039rrn",
        "code": null,
        "desc": "Denizli, Türkiye"
    },
    "Pristina": {
        "cityMap": {"PRN": "/m/01nyhl"},
        "type": 3,
        "infoLists": ["PRN"],
        "text": "/m/01nyhl",
        "code": null,
        "desc": "Pristina"
    },
    "Imperial/El Centro": {"type": 1, "code": "IPL"},
    "Puerto Montt": {
        "cityMap": {"PMC": "/m/03fxkl"},
        "type": 3,
        "infoLists": ["PMC"],
        "text": "/m/03fxkl",
        "code": null,
        "desc": "Puerto Montt, Chile"
    },
    "Lord Howe Island": {
        "cityMap": {"LDH": "/m/02m6g4"},
        "type": 3,
        "infoLists": ["LDH"],
        "text": "/m/02m6g4",
        "code": null,
        "desc": "Lord Howe Island, Australia"
    },
    "Pontianak": {
        "cityMap": {"PNK": "/m/05rr4g"},
        "type": 3,
        "infoLists": ["PNK"],
        "text": "/m/05rr4g",
        "code": null,
        "desc": "Pontianak, Indonesia"
    },
    "Toowoomba": {
        "cityMap": {"BNE": "/m/01b8jj", "WTB": "/m/02ckm7"},
        "type": 3,
        "infoLists": ["BNE", "WTB"],
        "text": "/m/02ckm7",
        "code": null,
        "desc": "Toowoomba, Australia"
    },
    "Nanchang": {
        "cityMap": {"KHN": "/m/0229n5"},
        "type": 3,
        "infoLists": ["KHN"],
        "text": "/m/0229n5",
        "code": null,
        "desc": "Nanchang, China"
    },
    "Katowice": {
        "cityMap": {"KTW": "/m/0bld8"},
        "type": 3,
        "infoLists": ["KTW"],
        "text": "/m/0bld8",
        "code": null,
        "desc": "Katowice, Poland"
    },
    "Nowy Dwor Mazowiecki": {
        "cityMap": {"WMI": "/m/022b2m", "WAW": "/m/081m_"},
        "type": 3,
        "infoLists": ["WMI", "WAW"],
        "text": "/m/022b2m",
        "code": null,
        "desc": "Nowy Dwór Mazowiecki, Poland"
    },
    "La Romana": {
        "cityMap": {"PUJ": "/m/05sc7g", "SDQ": "/m/0fthl", "LRM": "/m/06v1cr"},
        "type": 3,
        "infoLists": ["PUJ", "SDQ", "LRM"],
        "text": "/m/06v1cr",
        "code": null,
        "desc": "La Romana, Dominican Republic"
    },
    "Maastricht/Aachen": {
        "cityMap": {},
        "type": 1,
        "text": "/m/03bgl4",
        "code": "MST",
        "desc": "Maastricht Aachen Airport"
    },
    "San Luis Obispo": {
        "cityMap": {"LAX": "/m/030qb3t", "SBP": "/m/0r5lz", "SFO": "/m/0d6lp"},
        "type": 3,
        "infoLists": ["LAX", "SBP", "SFO"],
        "text": "/m/0r5lz",
        "code": null,
        "desc": "San Luis Obispo, California, USA"
    },
    "Knock": {
        "cityMap": {"NOC": "/m/01zc1c"},
        "type": 3,
        "infoLists": ["NOC"],
        "text": "/m/01zc1c",
        "code": null,
        "desc": "Knock, Ireland"
    },
    "Bhairawa": {"type": 1, "code": "BWA"},
    "Tobago": {
        "cityMap": {"TAB": "/m/015hqj", "POS": "/m/0fs29"},
        "type": 3,
        "infoLists": ["TAB", "POS"],
        "text": "/m/015hqj",
        "code": null,
        "desc": "Tobago, Trinidad & Tobago"
    },
    "Albuquerque": {
        "cityMap": {"ABQ": "/m/0djd3"},
        "type": 3,
        "infoLists": ["ABQ"],
        "text": "/m/0djd3",
        "code": null,
        "desc": "Albuquerque, New Mexico, USA"
    },
    "Tapachula": {
        "cityMap": {"TAP": "/g/120j3bfv"},
        "type": 3,
        "infoLists": ["TAP"],
        "text": "/g/120j3bfv",
        "code": null,
        "desc": "Tapachula, Mexico"
    },
    "Brindisi": {
        "cityMap": {"BDS": "/m/022vl3"},
        "type": 3,
        "infoLists": ["BDS"],
        "text": "/m/022vl3",
        "code": null,
        "desc": "Brindisi, Italy"
    },
    "Pagadian": {
        "cityMap": {"PAG": "/m/05n_j6"},
        "type": 3,
        "infoLists": ["PAG"],
        "text": "/m/05n_j6",
        "code": null,
        "desc": "Pagadian City, Philippines"
    },
    "Strasbourg": {
        "cityMap": {"SXB": "/m/09b83", "BSL": "/m/01k4f"},
        "type": 3,
        "infoLists": ["SXB", "BSL"],
        "text": "/m/09b83",
        "code": null,
        "desc": "Strasbourg, France"
    },
    "Ushuaia": {
        "cityMap": {"USH": "/m/01zdns"},
        "type": 3,
        "infoLists": ["USH"],
        "text": "/m/01zdns",
        "code": null,
        "desc": "Ushuaia, Argentina"
    },
    "Almeria": {
        "cityMap": {"LEI": "/m/022358", "AGP": "/m/01978d"},
        "type": 3,
        "infoLists": ["LEI", "AGP"],
        "text": "/m/022358",
        "code": null,
        "desc": "Almería, Spain"
    },
    "Memmingen": {
        "cityMap": {"FMM": "/m/02jv3s"},
        "type": 3,
        "infoLists": ["FMM"],
        "text": "/m/02jv3s",
        "code": null,
        "desc": "Memmingen, Germany"
    },
    "Aguascalientes": {
        "cityMap": {"AGU": "/m/018mcy", "GDL": "/m/0jp26"},
        "type": 3,
        "infoLists": ["AGU", "GDL"],
        "text": "/m/018mcy",
        "code": null,
        "desc": "Aguascalientes, Mexico"
    },
    "Alamosa": {
        "cityMap": {
            "COS": "/m/01vsl",
            "DEN": "/m/02cl1",
            "ALS": "/m/0gg9f",
            "DRO": "/m/0rbmc",
            "SAF": "/m/0f25y"
        },
        "type": 3,
        "infoLists": ["COS", "DEN", "ALS", "DRO", "SAF"],
        "text": "/m/0gg9f",
        "code": null,
        "desc": "Alamosa, Colorado, USA"
    },
    "Vinh City": {"type": 1, "code": "VII"},
    "Pokhara": {
        "cityMap": {"PKR": "/m/040dx3"},
        "type": 3,
        "infoLists": ["PKR"],
        "text": "/m/040dx3",
        "code": null,
        "desc": "Pokhara, Nepal"
    },
    "Mashhad": {
        "cityMap": {"MHD": "/m/024hh1"},
        "type": 3,
        "infoLists": ["MHD"],
        "text": "/m/024hh1",
        "code": null,
        "desc": "Mashhad, Iran"
    },
    "Nakhon Si Thammarat": {
        "cityMap": {"NST": "/m/01hkld"},
        "type": 3,
        "infoLists": ["NST"],
        "text": "/m/0587hc",
        "code": null,
        "desc": "Nakhon Si Thammarat, Thailand"
    },
    "Arcata/Eureka": {"type": 1, "code": "ACV"},
    "Gaborone": {
        "cityMap": {"GBE": "/m/0fndh"},
        "type": 3,
        "infoLists": ["GBE"],
        "text": "/m/0fndh",
        "code": null,
        "desc": "Gaborone, Botswana"
    },
    "Preveza/Lefkada": {"type": 1, "code": "PVK"},
    "Iquique": {
        "cityMap": {"IQQ": "/m/04ssfh"},
        "type": 3,
        "infoLists": ["IQQ"],
        "text": "/m/04ssfh",
        "code": null,
        "desc": "Iquique, Chile"
    },
    "Odate/Noshiro": {"cityMap": {}, "type": 1, "text": "/m/02pll6h", "code": "ONJ", "desc": "Ōdate-Noshiro Airport"},
    "Bismarck": {
        "cityMap": {"BIS": "/m/0fvyz"},
        "type": 3,
        "infoLists": ["BIS"],
        "text": "/m/0fvyz",
        "code": null,
        "desc": "Bismarck, North Dakota, USA"
    },
    "Tangier": {
        "cityMap": {"TNG": "/m/01q9q7"},
        "type": 3,
        "infoLists": ["TNG"],
        "text": "/m/01q9q7",
        "code": null,
        "desc": "Tangier, Morocco"
    },
    "Pescara": {
        "cityMap": {"PSR": "/m/03f2hc", "FCO": "/m/06c62"},
        "type": 3,
        "infoLists": ["PSR", "FCO"],
        "text": "/m/03f2hc",
        "code": null,
        "desc": "Pescara, Italy"
    },
    "Chapeco": {
        "cityMap": {"XAP": "/m/03nfr0"},
        "type": 3,
        "infoLists": ["XAP"],
        "text": "/m/03nfr0",
        "code": null,
        "desc": "Chapecó, Brazil"
    },
    "Sialkot": {
        "cityMap": {"SKT": "/m/023vwt", "LHE": "/m/0xnt5"},
        "type": 3,
        "infoLists": ["SKT", "LHE"],
        "text": "/m/023vwt",
        "code": null,
        "desc": "Sialkot, Pakistan"
    },
    "Djibouti": {
        "cityMap": {"JIB": "/m/028096h"},
        "type": 3,
        "infoLists": ["JIB"],
        "text": "/m/07sl1t",
        "code": null,
        "desc": "Lac 'Assal, Djibouti"
    },
    "Providenciales": {
        "cityMap": {"PLS": "/m/06vjt_"},
        "type": 3,
        "infoLists": ["PLS"],
        "text": "/m/06vjt_",
        "code": null,
        "desc": "Providenciales, Turks & Caicos Islands"
    }
}
let functionCallCount = 0;


// Object.keys(aa).forEach(e => {
//     CityCodeCache.set(e, aa[e])
// })

// import {genBgr} from '../vm/out.js';

function randint(a, b) {
    return parseInt((b - a) * Math.random() + a)
}

/**
 * @param {flightRequestParamsFactory} param
 */
export class flightEngine {
    /**
     *
     * @param {requestParam} param
     * @param log
     */
    constructor(param, log, startTime, timeoutMills) {
        this.startTime = startTime;
        this.timeoutMills = timeoutMills;
        this.bookingCnt = 0;
        this.functionCallCount = 0;
        // 保存提取到的jspb的参数
        this.curParams = undefined;
        let abortController = new AbortController();
        this.abortController = abortController;
        let timeout = Date.now() - this.startTime + timeoutMills;
        log.info(`start abort signal ${timeout}`)
        this.abortId = setTimeout(() => {
            this.abortController.abort('timeout');
        }, timeout)
        this.param = param;

        this.currencyName = this.param.currencyName;
        this.locationName = this.param.locationName;
        this.log = log;
        this.proxy = param.proxy;
        // this.proxy.username = this.proxy.username.replaceAll('region-any', `region-${this.getRandomRegion()}`)
        log.info(`flightEngine Initialized ${this.locationName} ${this.currencyName} with proxy: ${this.proxy.username}:${this.proxy.password}@${this.proxy.server}`)
        let proxy = {
            host: this.proxy.server.split(':')[0],
            port: parseInt(this.proxy.server.split(':')[1]), // 如果你的代理服务器需要认证，则还需要添加：
            auth: {
                username: this.proxy.username, password: this.proxy.password
            },
            protocol: 'http'
        }
        const httpAgent = new HttpProxyAgent(`http://${this.proxy.username}:${this.proxy.password}@${this.proxy.server}`);
        const httpsAgent = new HttpsProxyAgent(`http://${this.proxy.username}:${this.proxy.password}@${this.proxy.server}`);

        // log.info(proxy)
        this.client = axios.create({
            timeout: 15000,
            maxBodyLength: 1024 * 1024 * 1024 * 1024,
            httpAgent: httpAgent,
            httpsAgent: httpsAgent
            // proxy: proxy
        });
        // this.randomProxy()
        this.bl = 'boq_travel-frontend-flights-ui_20250113.02_p0'
        this.sid = '-8122060522110040652';
        this.NID = null;

        this.QCa = 0;


    }

    get _reqid() {
        this.ob = this.QCa++;
        let a = new Date();
        let RCa = a.getHours() * 3600 + a.getMinutes() * 60 + a.getSeconds();
        this.Oa = 1 + RCa + this.ob * 1E5;
        // console.log('this.Oa', this.Oa)
        return this.Oa
    }

    randomSessionId() {
        let strs = 'abcdefghijklmnopqrstuvwxyz1234567890';
        let sessionID = 'ASDWD';
        for (let i = 0; i < 8; i++) {
            sessionID += strs.charAt(parseInt(Math.random() * strs.length))
        }
        return sessionID;
    }

    randomProxy() {


        let users = this.proxy.username.split('-')
        let sessIdIdx = users.indexOf('sessionID') + 1;
        if (sessIdIdx !== 0) {
            users[sessIdIdx] = this.randomSessionId();
            this.log.warn('reset sessionId', users.join('-'))
            this.proxy.username = users.join('-')
            const httpAgent = new HttpProxyAgent(`http://${users.join('-')}:${this.proxy.password}@${this.proxy.server}`);
            const httpsAgent = new HttpsProxyAgent(`http://${users.join('-')}:${this.proxy.password}@${this.proxy.server}`);
            let proxy = {
                host: this.proxy.server.split(':')[0],
                port: parseInt(this.proxy.server.split(':')[1]), // 如果你的代理服务器需要认证，则还需要添加：
                auth: {
                    username: users.join('-'),
                    password: this.proxy.password
                },
                protocol: 'http'
            }
            this.client = axios.create({
                timeout: 7000,
                maxBodyLength: 1024 * 1024 * 1024 * 1024,
                httpAgent: httpAgent,
                httpsAgent: httpsAgent
                // proxy: proxy
            });
        }
    }

    async gzipAndEncode(input) {
        try {
            const gzipPromise = util.promisify(gzip);
            const compressed = await gzipPromise(Buffer.from(input, 'utf-8'));
            return compressed.toString('base64');
        } catch (e) {
            this.log.error("fail to gzip", e);
            return null;
        }
    }

    async searchByName(cityName, cityCode, log) {
        if (CityCodeCache.has(cityName)) {
            let result = CityCodeCache.get(cityName)
            log.info(`read from cache ${cityName} => ${JSON.stringify(result)}`)
            return result;
        }
        let shoppingParams = flightRequestParamsFactory.createSearchParam(cityName);
        log.info(`serch ${cityName} params ${shoppingParams}`);
        let params = `rpcids=H028ib&source-path=%2Ftravel%2Fflights%2Fsearch&f.sid=${this.sid}&bl=${this.bl}&hl=en-US&gl=${this.param.locationName}&soc-app=162&soc-platform=1&soc-device=1&_reqid=${this._reqid}&rt=c`;
        // console.log('f.req---==---',shoppingParams)
        let body = {"f.req": shoppingParams};
        let res = await this.doRequest("https://www.google.com/_/FlightsFrontendUi/data/batchexecute?" + params, shoppingParams, body, this.param);
        // console.log(res)
        let data = parse(res.data)
        // console.log('---data---',data)
        let executeList = [];

        // 解析
        for (let i = 0; i < data.length; i++) {
            let a = data[i];
            // 不是这个 H028ib 的就不处理
            if (a[0][0] !== "wrb.fr" && a[0][1] !== "H028ib") {
                continue;
            }
            let executeInfo = JSON.parse(a[0][2]);
            // console.log('----molia----',JSON.stringify(executeInfo))

            let infoList = executeInfo[0];
            // console.log('---infoList---',infoList)
            if (infoList !== null && infoList !== undefined) {
                for (let j = 0; j < infoList.length; j++) {
                    let respExecutedData = {
                        cityMap: {},
                    };
                    let infoJ = infoList[j];
                    // console.log('---infoJ---',infoJ)
                    let info = infoJ[0];
                    let type = info[0];
                    // console.log('---type---',info)
                    respExecutedData.type = type;
                    if (infoJ.length > 1) {
                        let list = infoJ[1];

                        let airports = [];
                        for (let k = 0; k < list.length; k++) {
                            let air = list[k][0];
                            if (air[0] === 1) {
                                airports.push(air[5]);
                                respExecutedData.cityMap[air[5]] = air[4];
                            }
                        }
                        respExecutedData.infoLists = airports;
                    }

                    respExecutedData.text = info[4];
                    respExecutedData.code = info[5];
                    respExecutedData.desc = info[1];
                    executeList.push(respExecutedData);
                }

            }
        }

        // console.log('---executeList---',executeList)
        let result;
// 先找city类型 包含code 的
        let cityList = executeList.filter(executedData => executedData.type === 3 && executedData.infoLists.includes(cityCode));
        if (cityList.length !== 0) {

            result = cityList[0];
            // // lizijian--注释
            // if (result.infoLists.length === 1){
            //     result = {};
            //     result.type = 1;
            //     result.code = cityCode
            // }

        } else {
            // // lizijian--注释
            // // 再找 airport类型 等于 code 的
            // let matchCityCodeList = executeList.filter(executedData => executedData.type === 1 && executedData.code === cityCode);
            // 再回去找city 类型 desc包含name 的
            let matchCityCodeList = executeList.filter(executedData => executedData.type === 3 && executedData.desc.includes(cityName));

            if (matchCityCodeList.length !== 0) {
                result = matchCityCodeList[0];
            } else {
                // 再回去找city 类型 desc包含name 的
                let matchCitynameList = executeList.filter(executedData => executedData.type === 3);

                if (matchCitynameList.length !== 0) {
                    result = matchCitynameList[0];
                } else {

                    let moliamatchCityCodeList = executeList.filter(executedData => executedData.type === 1 && executedData.code === cityCode);
                    if (moliamatchCityCodeList.length !== 0){
                        result = moliamatchCityCodeList[0]
                    }else {
                        // 还没有就报错吧
                        result = {};
                        result.type = 1;
                        result.code = cityCode
                    }
                }
            }
        }
        CityCodeCache.set(cityName, result)
        return result;
        // ArrayList<RespExecutedData> executeList = parseBatchexecute(res);

    }

    async doRequest(url, params, body, flightParams, modHeaders = null) {


        for (let i = 0; i < 3; i++) {
            try {

                let bgrStartTime = Date.now()
                let bgr = await this.genSign(params)
                let bgrCostTime = Date.now() - bgrStartTime;
                console.log(`${params} to ${bgr}`)
                // await sleep(28000);
                let startTime = Date.now();
                let headers = {
                    "host": "www.google.com",
                    "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
                    "accept": "*/*",
                    "accept-language": "en,en-US;q=0.9,zh-CN;q=0.8,zh;q=0.7,ru;q=0.6",
                    "accept-encoding":'gzip, deflate, br, zstd',
                    "cache-control": "no-cache",
                    "content-type": "application/x-www-form-urlencoded;charset=UTF-8",
                    "origin": "https://www.google.com",
                    "pragma": "no-cache",
                    "priority": "u=1, i",
                    "referer": "https://www.google.com/travel/flights/booking?tfs=CBwQAhpgEgoyMDI0LTExLTI1Ih8KA1lYRRIKMjAyNC0xMS0yNRoDWVlDKgJXUzIDNjAxIh8KA1lZQxIKMjAyNC0xMS0yNRoDWVhYKgJXUzIDMzExagcIARIDWVhFcgcIARIDWVhYGmASCjIwMjQtMTItMDIiHwoDWVhYEgoyMDI0LTEyLTAyGgNZWUMqAldTMgM0NzgiHwoDWVlDEgoyMDI0LTEyLTAyGgNZWEUqAldTMgM2MDBqBwgBEgNZWFhyBwgBEgNZWEVAAUgBcAGCAQsI____________AZgBAQ&tfu=CnRDalJJVHpKNmQxTXlURVl3ZVVWQlFWSnlTRkZDUnkwdExTMHRMUzB0ZEd4aVkzUXlNa0ZCUVVGQlIyTTNOMUpOVG1SSVFtVkJFZ3RYVXpRM09IeFhVell3TUJvTENLU0VBeEFDR2dORFFVUTRISER5bEFJPRICCAAiAwoBMQ&gl=CA&curr=CAD",
                    "sec-ch-ua": "\"Google Chrome\";v=\"131\", \"Chromium\";v=\"131\", \"Not_A Brand\";v=\"24\"",
                    "sec-ch-ua-arch": "\"arm\"",
                    "sec-ch-ua-bitness": "\"64\"",
                    "sec-ch-ua-form-factors": "\"Desktop\"",
                    "sec-ch-ua-full-version": "\"131.0.6778.70\"",
                    "sec-ch-ua-full-version-list": "\"Google Chrome\";v=\"131.0.6778.70\", \"Chromium\";v=\"131.0.6778.70\", \"Not_A Brand\";v=\"24.0.0.0\"",
                    "sec-ch-ua-mobile": "?0",
                    "sec-ch-ua-model": "\"\"",
                    "sec-ch-ua-platform": "\"macOS\"",
                    "sec-ch-ua-platform-version": "\"15.1.0\"",
                    "sec-ch-ua-wow64": "?0",
                    "sec-fetch-dest": "empty",
                    "sec-fetch-mode": "cors",
                    "sec-fetch-site": "same-origin",
                    "x-same-domain": "1",
                    "x-goog-batchexecute-bgr": bgr,

                }
                if (this.curParams !== undefined){
                    headers["x-goog-ext-259736195-jspb"] =  this.curParams
                }else{
                    headers["x-goog-ext-259736195-jspb"] = `["en-US","${this.locationName}","${this.currencyName}",2,null,[-480],null,null,7,[]]`
                }
                if (modHeaders !== null) {
                    headers = modHeaders
                    headers["x-goog-batchexecute-bgr"] = bgr
                    if (this.curParams !== undefined){
                        headers["x-goog-ext-259736195-jspb"] =  this.curParams
                    }else{
                        headers["x-goog-ext-259736195-jspb"] = `["en-US","${this.locationName}","${this.currencyName}",2,null,[-480],null,null,7,[]]`
                    }
                }

                // if (this.NID !== null){
                //     headers['cookie'] = `NID=${this.NID}`;
                // }
                this.log.info(`${params} ${headers['x-goog-ext-259736195-jspb']} request ${i} `)
                let res = await this.client.post(url, body, {
                    headers: headers,
                    signal: this.abortController.signal,
                })
                this.log.info(`bgrcost: ${bgrCostTime / 1000} ${i} request cost ${(Date.now() - startTime) / 1000}s`)
                return res;
            } catch (e) {

                if (Date.now()  - this.startTime >   this.timeoutMills){
                    this.log.error("timeout");
                    throw new TimeoutError(e.message);

                }
                if (e.message.includes('canceled')) {
                    throw new TimeoutError(e.message);
                }

                if (i >= 2) {
                    throw new RequestError(e.message);
                }

                // this.log.error(`${this.proxy} request ${i} error ${e.message}`)
                this.randomProxy()


                await sleep(500); // Sleep for 2000 milliseconds (2 seconds)

            }

        }

    }


    async genSign(params) {
        for (let i = 0; i < 5; i++) {
            try {
                let res = await poolSign(params);
                // console.log(res)
                if (res.hasReload){
                    this.log.info(`bgr reload count: ${res.beforeCount}`)
                }
                if (!res.success){
                    this.log.error(`bgr error `)

                }
                // console.log('genSign', res.hashId)
                return res.sign
            } catch (e) {
                // this.log.error('genBgr error',e.message)
                await sleep(100);
            }
        }
        return '';
    }

    /**
     *
     * @param {requestParam} flightParams
     * @param {Logger}log
     * @returns {Promise<void>}
     */
    async getShoppingResults(flightParams, log, isMore, retry) {

        // this.client = axios.create({
        //     proxy: {
        //         host: 'localhost',
        //         port: 8890,
        //         protocol: 'http'
        //     }
        // });


        let startTime = Date.now();
        let respShoppingData = {};
        let gfsParsedDataArrayList = [];
        // let protobuf_decoder = await this.client.get("https://www.google.com/travel/flights/search?tfs=CBwQAhosEgoyMDI1LTA5LTI2ag4IAxIKL20vMGc1N2M5bXIOCAMSCi9tLzAycWpiN3oaLBIKMjAyNS0wOS0yOGoOCAMSCi9tLzAycWpiN3pyDggDEgovbS8wZzU3YzltQAFIAXABggELCP___________wGYAQE&tfu=EgIIACIGCgEwEgEw&hl=en-US&gl=CA&tcfs=ChUKCC9tLzA0Ym54Ggnpq5jpm4TluIISFQoIL20vMDQ5ZDESCeWQiemahuWdoVIEYAJ4AQ&curr=CAD", {
        //         headers: {
        //     "Host": "www.google.com",
        //     "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
        //     "accept-language": "en,en-US;q=0.9,zh-CN;q=0.8,zh;q=0.7,ru;q=0.6",
        //     "cache-control": "no-cache",
        //     "pragma": "no-cache",
        //     "priority": "u=0, i",
        //     "sec-ch-ua": "\"Google Chrome\";v=\"131\", \"Chromium\";v=\"131\", \"Not_A Brand\";v=\"24\"",
        //     "sec-ch-ua-arch": "\"arm\"",
        //     "sec-ch-ua-bitness": "\"64\"",
        //     "sec-ch-ua-form-factors": "\"Desktop\"",
        //     "sec-ch-ua-full-version": "\"131.0.6778.70\"",
        //     "sec-ch-ua-full-version-list": "\"Google Chrome\";v=\"131.0.6778.70\", \"Chromium\";v=\"131.0.6778.70\", \"Not_A Brand\";v=\"24.0.0.0\"",
        //     "sec-ch-ua-mobile": "?0",
        //     "sec-ch-ua-model": "\"\"",
        //     "sec-ch-ua-platform": "\"macOS\"",
        //     "sec-ch-ua-platform-version": "\"15.1.0\"",
        //     "sec-ch-ua-wow64": "?0",
        //     "sec-fetch-dest": "document",
        //     "sec-fetch-mode": "navigate",
        //     "sec-fetch-site": "same-origin",
        //     "sec-fetch-user": "?1",
        //     "upgrade-insecure-requests": "1",
        //     "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
        //     "x-browser-channel": "stable",
        //     "x-browser-copyright": "Copyright 2024 Google LLC. All rights reserved.",
        //     "x-browser-validation": "f17l9rSuHmrgo31qEeG2bl8fxeI=",
        //     "x-browser-year": "2024"
        // }
        //     })
        // protobuf_decoder = JSON.parse(/key: 'ds:1', hash: '5', data:(.+?)],\[\[\[\[\[/.exec(protobuf_decoder.data)[1]+"]]")[0].at(-1)
        // let shoppingParams = flightRequestParamsFactory.createShoppingParams(flightParams, isMore,protobuf_decoder);
        let shoppingParams = flightRequestParamsFactory.createShoppingParams(flightParams, isMore);
        log.info(`query shopping params: ${shoppingParams}`);
        let params = `f.sid=${this.sid}&bl=${this.bl}&hl=en-US&gl=${this.param.locationName}&soc-app=162&soc-platform=1&soc-device=1&_reqid=${this._reqid}&rt=c`;

        let body = {"f.req": shoppingParams};
        log.info(params)
        let gfsParsedData = {};
        gfsParsedData.bestFlightList = [];
        gfsParsedData.commonFlightList = [];
        respShoppingData.data = gfsParsedData
        // if (Date.now() - this.startTime > this.timeoutMills){
        //     this.log.info('timeout return');
        //     return respShoppingData;
        // }
        let moreNum = 0;
        try {
            let res = await this.doRequest("https://www.google.com/_/FlightsFrontendUi/data/travel.frontend.flights.FlightsFrontendService/GetShoppingResults?" + params, shoppingParams, body, this.param);
            let data = new Decoder().decode(res.data)
            respShoppingData.text = await this.gzipAndEncode(res.data);
            // fs.writeFileSync('temp.txt', res.data)
            let setsMap = new Map();
            for (let i = 0; i < data.length; i++) {
                let a = data[i];
                if (a[0][0] !== 'wrb.fr') {
                    continue
                }
                if (a[0][2] == null) {
                    respShoppingData.data = gfsParsedData;

                    continue;
                }
                let b = JSON.parse(a[0][2])
                // if (b[2] === null) {
                //     continue
                // }
                let res = this.parseShoppingList(b)

                moreNum = res.moreNum;
                for (var best of res.bests) {
                    let key = this.getSetKey(best)
                    if (!setsMap.has(key)) {
                        gfsParsedData.bestFlightList.push(best)
                        setsMap.set(key, 1)
                    }
                }
                for (var best of res.commons) {
                    let key = this.getSetKey(best)
                    if (!setsMap.has(key)) {
                        gfsParsedData.commonFlightList.push(best)
                        setsMap.set(key, 1)
                    }
                }

            }
        } catch (e) {
            if (e instanceof RequestError) {
                this.log.error('get shopping request error', e);
                return respShoppingData;
            }
            if (e instanceof TimeoutError) {
                // this.log.error('get shopping timeout error', e);
                throw e;
            }
            this.log.error('get shopping error', e);
        }
        let respLen = (respShoppingData.data.bestFlightList.length + respShoppingData.data.commonFlightList.length);
        if (
            (
                !flightParams.isTripType && (respLen < flightParams.topN)
                || flightParams.isTripType && (respLen <= flightParams.depOfficialTopN)
            )
            && !isMore && moreNum !== 0) {
            this.log.info(`now best ${respShoppingData.data.bestFlightList.length} com ${respShoppingData.data.commonFlightList.length} = ${respLen} < (${flightParams.topN} || ${flightParams.depOfficialTopN}) need click more flights`);
            let moreResults = await this.getShoppingResults(flightParams, log, true);
            respShoppingData = this.mergeShoppingResults(respShoppingData, moreResults);
        }
        if (respShoppingData.data.bestFlightList.filter(e=>e.minimumPrice === undefined).length  !== 0
            || respShoppingData.data.commonFlightList.filter(e=>e.minimumPrice === undefined).length  !== 0){
            // debugger
            // if (retry === true){
            //     return respShoppingData
            // }
            this.log.error('price undefined')
            // this.randomProxy()
            // return this.getShoppingResults(flightParams, log, isMore, true)
        }
        return respShoppingData

    }

    /**
     *
     * @param {requestParam} flightParams
     * @param {flightInfo} gfsFlight
     * @returns {undefined}
     */
    async getShoppingReturnResults(flightParams, gfsFlight, isMore) {
        const startTime = Date.now();
        let respShoppingData = {};


        const shoppingParams = flightRequestParamsFactory.createShoppingReturnParams(flightParams, gfsFlight, isMore);
        // console.log("shoppingParams = " + shoppingParams);
        const params = `f.sid=${this.sid}&bl=${this.bl}&hl=en&gl=${flightParams.locationName}&soc-app=162&soc-platform=1&soc-device=1&_reqid=${this._reqid}&rt=c`;

        const multipartBody = {"f.req": shoppingParams};
        let gfsParsedData = {};
        gfsParsedData.bestFlightList = [];
        gfsParsedData.commonFlightList = [];
        respShoppingData.data = gfsParsedData;
        // if (Date.now() - this.startTime > this.timeoutMills){
        //     this.log.info('timeout return');
        //     return respShoppingData
        // }

        let moreNum = 0;
        try {
            const res = await this.doRequest(`https://www.google.com/_/FlightsFrontendUi/data/travel.frontend.flights.FlightsFrontendService/GetShoppingResults?${params}`, shoppingParams, multipartBody, flightParams);
            let data = new Decoder().decode(res.data)
            respShoppingData.text = await this.gzipAndEncode(res.data);


            let setsMap = new Map();

            for (let i = 0; i < data.length; i++) {
                let a = data[i];
                if (a[0][0] !== 'wrb.fr') {
                    continue
                }
                if (a[0][2] == null) {
                    respShoppingData.data = gfsParsedData;

                    continue
                }
                let b = JSON.parse(a[0][2])
                // if (b[2] === null) {
                //     continue
                // }
                let res = this.parseShoppingList(b)
                // console.log('-------------------请求第二个页面------------------- bests:  ',res.bests.length,'   commons:  ',res.commons.length)
                moreNum = res.moreNum;
                if (res.bests != null) {
                    for (var best of res.bests) {
                        let key = this.getSetKey(best)
                        if (!setsMap.has(key)) {
                            gfsParsedData.bestFlightList.push(best)
                            setsMap.set(key, 1)
                        }
                    }
                }

                if (res.commons != null) {
                    for (var best of res.commons) {
                        let key = this.getSetKey(best)
                        if (!setsMap.has(key)) {
                            gfsParsedData.commonFlightList.push(best)
                            setsMap.set(key, 1)
                        }
                    }
                }

            }
        } catch (e) {
            if (e instanceof RequestError) {
                this.log.error('get shopping return request error', e);
                return respShoppingData;
            }
            if (e instanceof TimeoutError) {
                // this.log.error('get shopping timeout request error', e);
                throw e;
            }
            this.log.error('get shopping return error', e);
        }

        let duration = Date.now() - startTime;
        // this.log.info(`query return cost ${duration}ms`);
        let respLen = (respShoppingData.data.bestFlightList.length + respShoppingData.data.commonFlightList.length);
        if (respLen <= flightParams.rtOfficialTopN && !isMore
            && moreNum !== 0
        ) {
            this.log.info(`${respLen} < ${flightParams.rtOfficialTopN} need click more return flights`);
            let moreResults = await this.getShoppingReturnResults(flightParams, gfsFlight, true);
            respShoppingData = this.mergeShoppingResults(respShoppingData, moreResults);
        }
        this.log.info('最终获得的第二页面总数据 :  bestFlightList:  ',respShoppingData.data.bestFlightList.length,'   commonFlightList:  ',respShoppingData.data.commonFlightList.length)
        return respShoppingData;
    }

    mergeShoppingResults(a, b) {
        let resp = {
            commonFlightList: [],
            bestFlightList: [],
        };
        let text = b.text;
        let data = {};
        let common = [];
        let setsMap = new Map();

        for (var best of a.data.commonFlightList) {
            let key = this.getSetKey(best)
            // console.log(key, setsMap.has(key))
            if (!setsMap.has(key)) {
                resp.commonFlightList.push(best)
                setsMap.set(key, 1)
            }
        }
        for (var best of b.data.commonFlightList) {
            let key = this.getSetKey(best)
            // console.log(key, setsMap.has(key))

            if (!setsMap.has(key)) {
                resp.commonFlightList.push(best)
                setsMap.set(key, 1)
            }
        }
        for (var best of a.data.bestFlightList) {
            let key = this.getSetKey(best)
            // console.log(key, setsMap.has(key))
            //
            if (!setsMap.has(key)) {
                resp.bestFlightList.push(best)
                setsMap.set(key, 1)
            }
        }
        for (var best of b.data.bestFlightList) {
            let key = this.getSetKey(best)
            // console.log(key, setsMap.has(key))

            if (!setsMap.has(key)) {
                resp.bestFlightList.push(best)
                setsMap.set(key, 1)
            }
        }

        return {
            data: resp,
            text: text
        }


    }

    /**
     *
     * @param {requestParam} flightParams
     * @param {flightInfo} depFlight
     * @param {flightInfo} returnFlight
     * @returns {undefined}
     */
    async getBookingResult(flightParams, depFlight, returnFlight) {
        let startTime = Date.now();
        let respBookingData = {};
        let gfsParsedData = {};
        gfsParsedData.channelPrices = [];
        respBookingData.data = gfsParsedData;
        if (Date.now() - this.startTime > this.timeoutMills){
            this.log.info('timeout return');
            return respBookingData;
        }
        await sleep(1000);

        try {
            let channelMap = new Map();
            let shoppingParams = flightRequestParamsFactory.createBookingParams(flightParams, depFlight, returnFlight);
            // shoppingParams = '[null,"[[null,\\"CjRIMkp6dU9Xc2YzZEVBSWloVEFCRy0tLS0tLS0tLXNlYmR2OEFBQUFBR2lRZlBJQ0Y4d1FBEgVDWDcxMBoKCMkYEAAaA0hLRDgccIC5Ag==\\"],[null,null,1,null,[],1,[1,0,0,0],null,null,null,null,null,null,[[[[[\\"/m/03h64\\",5]]],[[[\\"/m/06t2t\\",5]]],null,0,null,null,\\"2025-08-25\\",null,[[\\"HKG\\",\\"2025-08-25\\",\\"SIN\\",null,\\"CX\\",\\"711\\"]],null,null,null,null,null,3],[[[[\\"/m/06t2t\\",5]]],[[[\\"/m/03h64\\",5]]],null,0,null,null,\\"2025-08-29\\",null,[[\\"SIN\\",\\"2025-08-29\\",\\"HKG\\",null,\\"CX\\",\\"710\\"]],null,null,null,null,null,3]],null,null,null,1],null,0]"]'
            let params = `f.sid=${this.sid}&bl=${this.bl}&hl=en-US&gl=${this.param.locationName}&soc-app=162&soc-platform=1&soc-device=1&_reqid=${this._reqid}&rt=c`;


            // console.log(params)
            let body = {"f.req": shoppingParams};
            // await sleep(2200)
            if (!flightParams.isTripType && this.bookingCnt === 0) {
                await sleep(parseInt(Math.random() * 500) + 400)
            }

            this.functionCallCount++;
            let res = await this.doRequest("https://www.google.com/_/FlightsFrontendUi/data/travel.frontend.flights.FlightsFrontendService/GetBookingResults?" + params,
                shoppingParams, body, this.param, BookingHeader);


            let data = new Decoder().decode(res.data)

            respBookingData.text = await this.gzipAndEncode(res.data);
            respBookingData.data = gfsParsedData;
            for (let i = 0; i < data.length; i++) {
                let a = data[i];
                if (a[0][0] !== 'wrb.fr') {
                    continue
                }
                let bookInfo = JSON.parse(a[0][2]);
                let parseData = this.parseBookList(bookInfo,depFlight,returnFlight,shoppingParams)
                if (parseData !== null) {
                    gfsParsedData.rtFlight = parseData.rtFlight;
                    gfsParsedData.depFlight = parseData.depFlight;
                    gfsParsedData.flightNos = parseData.flightNos;
                    for (var channel of parseData.channelLists) {
                        let key = `${channel.name}${channel.flightNos}${channel.price}`
                        if (!channelMap.has(key)) {
                            gfsParsedData.channelPrices.push(channel);
                            channelMap.set(key, 1);
                        }
                    }
                }
            }
            // ${gfsParsedData.depFlight.airlineCode} ${DateToString(gfsParsedData.depFlight.departureTime)} to ${gfsParsedData.rtFlight.airlineCode} ${DateToString(gfsParsedData.rtFlight.departureTime)}
            this.log.info(`channels.count ${respBookingData.data.channelPrices.length} cost ${Date.now() - startTime}ms`)
            this.log.info(`channels.price ${respBookingData.data.channelPrices.map(e => e.name + '|' + e.flightNos + '|' + e.price + '|'+e.currency + '|' + e.amount + '|' + e.priceProto)}`)
            if (respBookingData.data.channelPrices.length === 0) {
                // debugger;
                //     fs.writeFileSync('aaa.txt', res.data)
            }

        } catch (e) {
            if (e instanceof RequestError) {
                this.log.error('get booking request error', e);
                return respBookingData;
            }
            if (e instanceof TimeoutError) {
                // this.log.error('get booking timeout request error', e);
                throw e;
            }
            this.log.error('get booking error', e.stack);
        }
        this.bookingCnt++;
        return respBookingData;
    }


    parseTime(a1, a2) {
        try {
            let depTime = new Date();
            depTime.setFullYear(a1[0], a1[1] - 1, a1[2])
            // depTime.setHours(a2[0], a2[1] === undefined ? 0 : a2[1])
            depTime.setHours(a2.length === 0 || a2[0] === null?12:a2[0], a2.length ===0 || a2[1] === undefined ? 0 : a2[1])
            depTime.setSeconds(0);
            return depTime
        } catch (err) {
            debugger
        }
    }

    parseFlights(flights, typeCode) {

        return flights.map(flight => {
            let info = flight[0];
            let price = flight[1][0][1]
            let depTime = this.parseTime(info[4], info[5])

            let landTime = this.parseTime(info[7], info[8])
            // console.log('order', flight[1][1])
            // if (flight[1][1] === 'CjRISFhQNF96NEphSXNBQkNZNGdCRy0tLS0tLS0tLXRsdWMyM0FBQUFBR2dBbTdzTU1VdkNBEgRCUjE1GgsInuUaEAIaA1VTRDgccJ7lGg=='){
            // if (flight[1][1] === 'CjRIalpFTUxKdzZrLWtBQlNGSXdCRy0tLS0tLS0tdGxvbzE4N0FBQUFBR2dBcmxnQWpueVFBEgVOSzY3NRoKCPp1EAIaA1VTRDgccPp1') {
            //     debugger;
            // }

            if (flight[1][0][1] === undefined){
                // debugger;
                // this.log.error('price undefined')
            }
            let a = {
                airlineCode: info[0],
                // airlineName: info[1][0],
                airlineName: info[1].join(' '),
                departureAirportCode: info[3],
                landingAirportCode: info[6],
                departureTime: depTime,
                landingTime: landTime,
                castMinutes: info[9],
                minimumPrice: flight[1][0][1],
                order: flight[1][1],
                typeCode: typeCode,
                legs: info[2].map(leg => {
                    let c = {
                        isShare: false,
                        airlineCode: leg[22][0],
                        airlineName: leg[22].join(' '),
                        flightNumber: leg[22][1],
                        aircraftCode: leg[17],

                        departureAirportCode: leg[3],
                        departureAirportName: leg[4],
                        landingAirportCode: leg[6],
                        landingAirportName: leg[5],
                        castMinutes: leg[11],

                        departureTime: this.parseTime(leg[20], leg[8]),
                        landingTime: this.parseTime(leg[21], leg[10]),
                    }
                    return c
                })

            }
            return a;
        })
    }

    parseShoppingList(b) {
        let bests = [];
        let commons = [];
        let typeCode = undefined;
        if (b[2] && b[2][0]) {
            bests = this.parseFlights(b[2][0], b[0][2])
            typeCode = 0;

        }
        if (b[3] && b[3][0]) {
            commons = this.parseFlights(b[3][0], b[0][2])
        }
        return {
            bests,
            commons,
            moreNum: b[3] ? b[3][1] : 1,
        }

    }


    parseBookList(bookInfo,depFlight,returnFlight,shoppingParams) {

        let arrList
        let res
        try {
            let info = bookInfo[1];
            arrList = info[0];
            if (arrList == null) {
                return null;
            }
        }catch (e){
            this.log.error(' wrb.fr no param : param1=',depFlight.airlineName,' == ',depFlight.legs.map(flight => flight.airlineCode),' param2=',returnFlight.airlineName,' == ',depFlight.legs.map(flight => flight.airlineCode),' params : ',shoppingParams)
            return null
        }
        let channelLists = arrList.map(channel => {
        let price = '';
        let priceProto = '';
        let currency = '';
        let amount = 0;
        if (channel[7] !== null) {
            price = channel[7][0][1]
            priceProto = channel[7][1]
            if (priceProto !== undefined && priceProto !== '') {
                try {
                    let pricePb = Price.decode(Buffer.from(priceProto, 'base64url'));
                    amount = Math.ceil((pricePb.detail.amount / 100))
                    currency = pricePb.detail.currency
                } catch (e) {

                }
            }
        }
        let a = {
            name: channel[1][0][1],
            shortName: channel[1][0][0],
            isAirline: channel[1][0][3],
            price: price,
            priceProto: priceProto,
            amount: amount,
            currency: currency,
            flightNos: channel[3].map(no => {
                return no[0] + no[1]
            }).join('/')
        }
        return a;
    })
        let base = bookInfo[1][5][0][0][2];
        res = {
            depFlight: this.parseBookFlight(bookInfo[1][5][0][0]),
            rtFlight: bookInfo[1][5][0][1] !== undefined ? this.parseBookFlight(bookInfo[1][5][0][1]) : null,
            channelLists: channelLists,
            flightNos: base.map(leg => {
                return leg[22][0] + leg[22][1]
            }).join('/')
        }
        return res;
    }

    parseBookFlight(info) {
        let depTime = this.parseTime(info[4], info[5])
        let landTime = this.parseTime(info[7], info[8])
        let a = {
            airlineCode: info[0],
            airlineName: info[1].join(' '),
            departureAirportCode: info[3],
            landingAirportCode: info[6],
            departureTime: depTime,
            landingTime: landTime,
            castMinutes: info[9],
            // minimumPrice: flight[1][0][1],
            // order: flight[1][1],
            legs: info[2].map(leg => {
                let c = {
                    isShare: false,
                    airlineCode: leg[22][0],
                    airlineName: leg[22].join(' '),
                    flightNumber: leg[22][1],
                    aircraftCode: leg[17],

                    departureAirportCode: leg[3],
                    departureAirportName: leg[4],
                    landingAirportCode: leg[6],
                    landingAirportName: leg[5],
                    castMinutes: leg[11],

                    departureTime: this.parseTime(leg[20], leg[8]),
                    landingTime: this.parseTime(leg[21], leg[10]),
                }
                return c
            })

        }
        return a;
    }


    async getParamInfo() {
        let url = `https://www.google.com/travel/flights?gl=${this.locationName}&curr=${this.currencyName}`;
        // url = 'http://127.0.0.1:8081/timeout'
        try {
            let r = await this.client.get(url, {
                headers: {
                    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
                    "accept-language": "en",
                    "accept-encoding":'gzip, deflate, br, zstd',
                    "cache-control": "no-cache",
                    "pragma": "no-cache",
                    "priority": "u=0, i",
                    "sec-ch-ua": "\"Google Chrome\";v=\"131\", \"Chromium\";v=\"131\", \"Not_A Brand\";v=\"24\"",
                    "sec-ch-ua-arch": "\"arm\"",
                    "sec-ch-ua-bitness": "\"64\"",
                    "sec-ch-ua-form-factors": "\"Desktop\"",
                    "sec-ch-ua-full-version": "\"131.0.6778.70\"",
                    "sec-ch-ua-full-version-list": "\"Google Chrome\";v=\"131.0.6778.70\", \"Chromium\";v=\"131.0.6778.70\", \"Not_A Brand\";v=\"24.0.0.0\"",
                    "sec-ch-ua-mobile": "?0",
                    "sec-ch-ua-model": "\"\"",
                    "sec-ch-ua-platform": "\"macOS\"",
                    "sec-ch-ua-platform-version": "\"15.1.0\"",
                    "sec-ch-ua-wow64": "?0",
                    "sec-fetch-dest": "document",
                    "sec-fetch-mode": "navigate",
                    "sec-fetch-site": "same-origin",
                    "sec-fetch-user": "?1",
                    "upgrade-insecure-requests": "1",
                    "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
                }
            })
            this.bl = /cfb2h":"(.+?)",/.exec(r.data)[1]
            try{
                this.NID = /NID=(.+?); expires/g.exec(r.headers["set-cookie"])[1]
                this.log.info(`NID ${this.NID}`)
            }catch (e){}
            try {
                this.sid = /FdrFJe":"(.+?)",/.exec(r.data)[1]
            } catch (e) {

            }
            try{
                let curBlRes = /\["en-US","\w+","\w+",\d+,null,null,null,null,\d+,\[\]\]/g.exec(r.data)
                if (curBlRes != null && curBlRes.length === 1){
                    this.curParams = curBlRes[0]
                    let temp = JSON.parse(this.curParams);
                    if (temp[5] === null){
                        temp[5] = [-480]
                        this.curParams = JSON.stringify(temp);
                    }
                    this.log.info(`curParams ${this.curParams}`)
                }
            }catch (e){

            }
        } catch (e) {
            this.log.warn('get request param bl error', e.toString())
        }


    }

    getRandomRegion() {
        let regions = ['us','hk','ca']
        let res = regions[parseInt(Math.random() * regions.length)]
        if (['us','ca','in','jp','sg','GB','hk'].indexOf(this.locationName.toLowerCase())){
            res = this.locationName.toLowerCase()
        }
        return res;
    }

    getSetKey(best) {
        let res =  `${best.airlineCode}${best.airlineName}${best.departureAirportCode}${best.landingAirportCode}${best.departureTime.toString()}${best.castMinutes}|`;
        if (best.legs && best.legs.length !== 0 ){
            for (let i = 0; i < best.legs.length; i++) {
                let leg = best.legs[i];
                res += `${leg.airlineCode}${leg.airlineName}${leg.castMinutes}${leg.departureTime.toString()}${leg.landingTime.toString()}|`

            }

        }
        return res;

    }
}

export function getCount() {
    return functionCallCount;
}

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

function DateToString(date) {
    return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()} ${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`;
}